まりふのひと

Excelマクロ.xlsmからWordマクロ.docmを起動したら「オブジェクトが必要です」と言われた


始めは「オブジェクトが必要です」とは言われなかったのに...


ステップ実行してもどこで発生しているのか解らないので、小さなプログラムを作って試行錯誤した。

  • Excelマクロ.xlsm: Excel2010で作成したVBA
  • Wordマクロ.docm: Word2010で作成したVBA
  • 両ファイルとも同じフォルダに置いてある。


 ケース1 エラーは発生しない

  • 動作状況
    1. Excelマクロ.xlsm を開く。
      • Sub[Auto_Exec]が走り出しす。
    2. msgbox に応答すると、
      • Wordマクロ.docm を起動し、
      • Wordマクロ.docm を開く。
      • Word の Sub[Auto_Open]を走らせる。*1
    3. Wordマクロ.docm が開く。
    4. msgbox に応答すると、
    5. Word が終了する。
    6. Excelが終了する。

  • Excelマクロ.xlsm のコード
Option Explicit

Public Sub Auto_Open()
Dim objWord As Object
Dim objDocument As Object
Dim MacroPath As String

    MacroPath = ThisWorkbook.Path
    
    MsgBox "「Wordマクロ」を起動します。", vbInformation
   
    Set objWord = CreateObject("Word.Application")
    objWord.Visible = True
    Set objDocument = objWord.Documents.Open(MacroPath & "\Wordマクロ.docm")
    objWord.Run ("Auto_Open")
    
    Set objWord = Nothing
    Set objDocument = Nothing
    Application.Quit
    ThisWorkbook.Close SaveChanges:=False
End Sub
  • Wordマクロ.docm のコード
Option Explicit

Sub Auto_Open()

    MsgBox "終了します。", vbInformation
    Application.Quit
    ActiveDocument.Close SaveChanges:=wdDoNotSaveChanges

End Sub
  • *1) 当初、このコードは無かった。
     Wordマクロ.docm を開いても何も動作しなかったので、「Auto_Open は利かないのかなぁ〜」と思い、後から追加した。


 ケース2 「オブジェクトが必要です」と言われた

  • コードの修正
     Word の自動実行は“AutoOpen” の間違いと気が付き、
    1. Wordマクロ.docm の Sub の名前を“AutoOpen” に変更。
    2. Excelマクロ.xlsm の “objWord.Run ("Auto_Open")” をコメントアウト
  • 動作状況
    1. Excelマクロ.xlsm を開く。
    2. msgbox に応答すると、
    3. Wordマクロ.docm が開く。
    4. msgbox に応答すると、
    5. Wordマクロ.docm が終了する。
    6. オブジェクトが必要です」のメッセージ(文頭の画面)が出る!


 編集後記

  • 文頭の画像は、昨日、取ったもの。
  • しかし今日、この記事を書きながら確認したら、エラーが出ない!
  • 再現性がないので、この記事は没にしようと思ったが、本番のマクロ(VBA)で再現テストすると確かに出る。
  • 結論は、テストデータでは 再現させることは出来なかった