• ベストアンサー

ワードでファイルを開くときに実行するプログラム

ワードでファイルを開くと同時に実行するプログラムを作りたいのですがうまくいきません。 以下のようなコードを書いたのですがプログラムが走りません。これはファイルを開くときのプロシージャではないのでしょうか? Private Sub Document_Open() With 種類 .AddItem "1" .AddItem "2" End With End Sub 回答よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.3

こんにちは。Wendy02です。 >それと不思議なのはプログラムを書いて保存して同じファイルを開いたのですがプログラムが全く動いてないときがあるのですがそれは原因は分かりますか? 具体的には分からないのですが、私も、確かに、「?」という時が、何百の内の何回かはありますね。そんな時に、私は、「Stop」という単語を使います。 普通のブレークポイント(●)ですと、アプリケーションソフトを終了すると、消えてしまいますが、「Stop」は消えません。一応、On Error トラップは、なしにしてください。 Sub ~() Stop   'こういう単語を置いて調べています。(適当な場所) End Sub そうすると、プロテクトをしていなければ、その単語に来ると、VBEが開いて「黄色のライン」になって止まります。その時、「ああ!、マクロは生きている」と思って、その後を、F8 を押して、ステップモードで進めていきます。止まらなければ、「生きていない」ということになり、原因を探します。 ただ、元のご質問のコントロールツールのComboBox のAddItem をいきなり入れていくのは、もしかしたら、アクティブX コントロールが実体化する時とのタイミングのずれがあるかもしれませんね。 もし、調子が悪いようでしたら、一度、ThisDocument_Open はやめて、標準モジュールのAuto_Open() マクロ側に設置してみたらどうかと思います。実は、タイムラグがあって、標準モジュール側のほうが、ThisDocument_Open側よりも遅れて働くのです。 それでダメだったら、本当の最初から、考え直してみましょうね。

miya_HN
質問者

お礼

いろいろ教えていただいて大変勉強になります。 今のところ問題はないようなのでこのままコードを書いていくつもりですが、問題があるようであればWendy02さんの言われたように「標準モジュールのAuto_Open()」など変えてみようと思います。 ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (2)

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.2

こんにちは。 ThisDocument モジュールに書いてあれば、当然、プログラムは走るはずですが、ただ、Normal.dot 側ですと、そのような特定のコントロール(種類)を指定したのでは、うまくできないかもしれません。 まず、コントロールツールの ListBox か、ComboBox なのか、フォームツールなのか、メニューコントロールなのか、そういうところは、大丈夫ですか?

miya_HN
質問者

お礼

今更ですが、お礼の記載が大変遅くなり、申し訳ありません。 ありがとうございました。

miya_HN
質問者

補足

コントロールツールはコンボボックスで、オブジェクト名も合っています。 ただ、コードは開く場所と違うThisDocument モジュールに書いていました(例えば文章1からプログラムを走らせたいと思ってたときに文章2のThisDocumentモジュールにコードを書いていました)。 それで動きませんでした(^_^;) ありがとうございました。 それと不思議なのはプログラムを書いて保存して同じファイルを開いたのですがプログラムが全く動いてないときがあるのですがそれは原因は分かりますか?

全文を見る
すると、全ての回答が全文表示されます。
  • marbin
  • ベストアンサー率27% (636/2290)
回答No.1

Word VBAはほとんど使わないのでよく分かりませんが This Document以外に記述している、ということはありませんか?

miya_HN
質問者

お礼

コードが開く場所と違うThisDocumentモジュールに書いていました(例えば文章1からプログラムを走らせたいと思ってたときに文章2のThisDocumentモジュールにコードを書いていました)。 ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • AccessVBAからWordのマクロを実行するには

    [環境]Access2000,Word2000 AccessVBAでWordのオブジェクトをつくりファイルを開くところまでは たどり着いたのですが、開いたWordファイルにあるマクロを実行させる ことが出来ずに困っています。 WordオブジェクトのApplicationとDocumentsオブジェクトの関係も把握 しきれていないため、おかしなソースになっているかも知れません。 よろしくお願いします。 sub DoMacro() Dim oWrd as Word.Application Dim oDoc as Word.Document Set oWrd = New Word.Application With oWrd Set oDoc = oWrd.Documents.Open("c:\test.doc") .Visible = True .Application.Run ("Macro1") oDoc.SaveAs "c:\newTest.doc" .Quit End With End Sub

  • Word VBA: 任意の html ファイルをファイルを開くダイアログから開くには?

    こんにちは、 Word VBA のことで質問があります。 今任意の html ファイルを[ファイルを開く]ダイアログから開くというマクロを作りたいので下記のプログラムを書きましたがこれではあらかじめファイル名やパスが指定されたものになってしまうので目的を満たせないと気づきました。。 Documents.Open メソッドではファイル名の指定が必須だそうですし、、そうするとほかに考えられる手段はどんなものか、 変数を使えばできそうですが、具体的にはどんなプログラムを組めばよいかなど悩んでいます。 ちなみにマクロを作成する環境は word 2003 です。 ***以下、現状のプログラム内容です。*** Private Sub OpenButton_Click() '任意の html ファイルを開き、[File Path] テキストフィールドへファイルのフルパスを表示します Dim dlgOpen As FileDialog Set dlgOpen = Application.FileDialog( _ FileDialogType:=msoFileDialogOpen) With dlgOpen .AllowMultiSelect = False If .Show = -1 Then MainWindow.TextBox1 = .SelectedItems(1) Documents.Open FileName:="C:\test.html", Format:=wdOpenFormatEncodedText End If End With End Sub ************************************************************ 目的を満たすためにはどのようなプログラムをかけばよろしいのか どなたかご指導いただけませんでしょうか よろしくお願いいたします。

  • VBA コンボボックスのコード記述位置について

    初心者です。初歩的な質問でお恥ずかしいのですが、コンボボックス用のコードを 記述するには「Private Sub UserForm_Initialize()」の下に記述するしかないのでしょうか。 例えば、縦長のユーザーフォームに上からコンボボックス1、コマンドボタン、コンボボックス2を 配置した場合、コードの記述をコンボボックス1の処理、コマンドボタンの処理、コンボボックス2の処理と、順番通りに記述することは出来るのでしょうか? 現在はこのようにコードを記述しています。 Private Sub UserForm_Initialize() With ComboBox1 .AddItem "赤色" .AddItem "青色" .AddItem "黄色" End With With ComboBox2 .AddItem "緑色" .AddItem "黒色" .AddItem "紫色" End With End Sub Private Sub CommandButton1_Click() MsgBox "テスト" End Sub 本当であれば、下記のように順番通りに記述したいです。 Private Sub UserForm_Initialize() With ComboBox1 .AddItem "赤色" .AddItem "青色" .AddItem "黄色" End With End Sub Private Sub CommandButton1_Click() MsgBox "テスト" End Sub With ComboBox2 .AddItem "緑色" .AddItem "黒色" .AddItem "紫色" End With End Sub With ComboBox2の上に、必要なコードを記述すればできるのでしょうか。 ご教示下さい。

  • wordのマクロを自動実行する方法

    excelの場合は、下記でファイルを開くと同時にマクロが自動実行されます。  Sub Auto_Open()   自動実行したい処理  End Sub wordの場合は、上記では自動実行出来ません。 wordのマクロを自動実行する方法を教えて下さい。 宜しく、お願いします。

  • Word:文書ファイルを開くたび、末尾に自動的に日付を挿入したい

    ご覧いただきありがとうございます。 Wordでマクロを使い、文書ファイルを開くたびにカーソルが文書末尾に飛んで、その位置にファイルを開いた日の日付が挿入されるようにしたいと思っています(Windows付属のメモ帳で、先頭行に.LOGと書いたファイルを編集するときのようなイメージです)。 Webで調べたところ、カーソルを末尾に飛ばすには、ThisDocumentに  Private Sub Document_Open()   Selection.EndKey Unit:=wdStory  End Sub と登録すればよいことがわかりました。また、手動でマクロを呼び出して日付を挿入するなら、  Private Sub AddFieldAsConst(Field As String)   With Selection    .Fields.Add(Range:=.Range, Type:=wdFieldEmpty, Text:=Field).Unlink   End With  End Sub  Public Sub AddDate()   AddFieldAsConst "TIME \@ ""ggge年M月d日(aaa)"" "  End Sub というコードを標準モジュールに登録すればよいということもわかりました。 しかし、これらのコードをどのようにいじれば日付の挿入が自動で行われるのかがわかりません。 どなたかおわかりになられる方、ご教授よろしくお願いいたします。 なお、OSおよびソフトのバージョンは、WindowsXP + Word2002です。

  • エクセルVBA ユーザーフォームのリストボックス

    エクセルVBAのユーザーフォームのリストボックスについて教えてください。 現在、以下のようにコードがされています。 Private Sub UserForm_Initialize() With UserForm.ListBox1 .AddItem "ABC" .AddItem "DEF" .AddItem "GHI" .ListIndex = 0 End With End Sub Private Sub ListBox1_Click() With ListBox2 .Clear Select Case UserForm.ListBox1.List(ListBox1.ListIndex) Case "ABC" .AddItem "123" .AddItem "456" .AddItem "789" Case "DEF" .AddItem "456" .AddItem "789" Case "GHI" .AddItem "789" End Select .ListIndex = 0 End With End Sub それで、ユーザーフォームを起動した時点で、ListBox1には"ABC"、ListBox2には"789"を選択し、青く色がついている状態にすることは可能でしょうか。 よろしくお願いします。

  • EXCEL VBAで、日付の後に曜日を追加する方法について

    EXCEL VBAの日付の機能のことで教えていただきたいことがあります。    A列 1行:2008/02/01 2行:2008/02/03 3行:2008/02/04  ・  ・ コントロールツールボックスでコンボボックスをシートに挿入 Private Sub Workbook_Open() With ComboBox1 .AddItem Range("A1") .AddItem Range("A2") .AddItem Range("A3")     ・     ・ End With End Sub コンボボックスには「2008/02/01」等と表示されたリストが表示されると思いますが、 選択した後の値を「2008/02/01(月)」というように、 日付の後に曜日を追加して表示させるにはどのような処理をしたらよろしいでしょうか。 Private Sub ComboBox2_Change() ComboBox2 = ? End Sub というようなやり方かとは思うのですが、具体的なコードがさっぱり思い浮かびません。 どうぞよろしくお願いいたします。

  • エクセルのマクロ コンボボックス他について

    下記のプログラムでユーザーフォームを作成しました。 まったく同じ記述で、他のブックでは、最終処理として、所定の箇所に選択した記号が表示(コピー)されるのですが、このブックでは表示されません。 しかし、エラーは出ていないので文法的には合っているようにおもいます。 それだけに、どこが違うのか尚更わかりません。 なお、Unload UserForm1 を Unload UserForm にした場合、 Sheets("基本データ作成").Range("C3") = UserForm1.ComboBox1.Value の UserForm1 を UserForm にした場合、 「実行時エラー424、オブジェクトが必要です。」のエラーが出ます。 どこが悪いのかわかりません。 どなたか、教えてください。 なお、エクセルは2003、OSはXPです。 Private Sub ComboBox1_Change() End Sub Private Sub ComboBox2_Change() End Sub Private Sub ComboBox3_Change() End Sub Private Sub CommandButton1_Click() Unload UserForm1 Sheets("基本データ作成").Range("C3") = UserForm1.ComboBox1.Value Unload UserForm1 Sheets("基本データ作成").Range("C4") = UserForm1.ComboBox2.Value Unload UserForm1 Sheets("基本データ作成").Range("C5") = UserForm1.ComboBox3.Value End Sub Private Sub UserForm_initialize() With ComboBox1 .AddItem "U" .AddItem "K" .AddItem "E" End With With ComboBox2 .AddItem "A" .AddItem "B" .AddItem "C" End With With ComboBox3 .AddItem "D" .AddItem "E" .AddItem "F" End With End Sub

  • マクロ 実行後にファイルを閉じたい

    マクロを実行した後、実行したファイルを閉じるようにしたいのですが、 どのように書いたらよいか分からず、どなたかご教授いただけませんでしょうか。 グーグルで検索したマクロを実行して、その後その実行したファイルを 閉じるように加えたかったため、以下のPrivate Sub book1close()を加えたのですが 何も起こらずファイルは開かれたままです。 まったく記述する構文を理解できてないのでお恥ずかしい質問で申し訳ございませんがどなたか、どうかよろしくお願い致します。 ---------------------------- Option Explicit  Sub 作業1()   ・・・・・・・  End Sub  Private Sub 作業2()   ・・・・・・・ End Sub Private Sub book1close()   この行以下を追加しましたが動きません! Application.DisplayAlerts = False Workbooks("Book1.xlsx").Save Workbooks("Book1.xlsx").Close Application.DisplayAlerts = True End Sub ----------------------------

  • 同じコンボボックスを二つ以上作る方法

    今同じ内容を表示するコンボボックスを二つ作ろうと思っているのですがつくり方がわかりません。 どのようにすれば一つのプログラムで二つのコンボボックスを作れるのでしょうか 例: 表示では はい いいえ プログラム: Private Sub UserForm_Initialize() ComboBox1.AddItem "はい" ComboBox1.AddItem "いいえ" End Sub Private Sub UserForm_Initialize() ComboBox2.AddItem "はい" ComboBox2.AddItem "いいえ" End Sub ↑のような作り方ではなく簡略化して Private Sub UserForm_Initialize() ComboBox●.AddItem "はい" ComboBox●.AddItem "いいえ" End Sub ●部を変更できれば一つのプログラムでコンボボックスを2つ操作できると思うのですがどのようにすればよろしいでしょうか?

専門家に質問してみよう