これをもう一度試してみましょう...
別のアドイン (XLAM の例を示します) を作成するか、COM アドインをこれに変更するか、この新しいアドインが確実に実行されるようにすることができます。このアドインは、アプリケーション レベルのApp_WorkbookActivate
イベントをトラップし、新しいブック名をチェックして、Microsoft Word からのものである可能性があるかどうかを確認します。
ワークブックがこの基準を満たしている場合、それがイベントをトリガーしているため、MS WordApp_WorkbookActivate
の現在のものがコンテナーであると想定するのはかなり安全と思われます。ActiveDocument
次に、いくつかのオブジェクト変数を設定して をキャプチャし、 、 it's 、および it'sWord.Application
を取得するだけで、これらの値を Excel ワークブック内の名前付き変数に格納できます。 ActiveDocument
.Path
.Name
Names
マネージャーでそれらを表示するか、名前.Names("docPath")
を参照してプログラムからアクセスすることができます.Names("docName")
.

これを XLAM ファイルの標準モジュールに入れます。
Sub Auto_Open()
Application.Run "ThisWorkbook.Workbook_Open" 'just in case
End Sub
次のコードはThisWorkbook
、XLAM ファイルのモジュールに入ります。
Option Explicit
Private WithEvents App As Application
Dim dictWorkbooks As Object
Private Sub Workbook_Open()
'## Instantiate the public variables for this Add-in:
Set App = Application
Set dictWorkbooks = CreateObject("Scripting.Dictionary")
End Sub
Private Sub App_WorkbookActivate(ByVal Wb As Workbook)
'## Attempt to determine if a Workbook is opened from MS Word,
' and if so, store the container document's path & name in
' named variable/range in the Workbook.
Dim wdApp As Object
Dim wdDoc As Object
Dim docPath As String
Dim docName As String
Dim w As Integer
If Wb.Name Like "Chart in Microsoft Word" Then
'Get out of here if we already have this workbook activated.
If dictWorkbooks.Exists(Wb.Name) Then Exit Sub
Set wdApp = GetObject(, "Word.Application")
Set wdDoc = wdApp.ActiveDocument
docPath = wdDoc.Path
docName = wdDoc.Name
dictWorkbooks.Add Wb.Name, docName
With Wb
On Error Resume Next
.Names("docPath").Delete
.Names("docName").Delete
On Error GoTo 0
.Names.Add Name:="docPath", RefersToR1C1:=docPath
.Names("docPath").Comment = "A variable stores the parent DOC file's path"
.Names.Add Name:="docName", RefersToR1C1:=docName
.Names("docName").Comment = "A variable stores the parent DOC file's name"
End With
End If
End Sub
Private Sub App_WorkbookBeforeClose(ByVal Wb As Workbook, Cancel As Boolean)
'## If you open multiple charts from the word document, without closing the Workbook
' they will be assigned unique names. However, if you open & close multiple Workbook
' they will all have the same name "Chart in Microsoft Word". This method will
' remove an existing Key from our Dictionary when a workbook is closed, in order to
' prevent false matches.
If dictWorkbooks.Exists(Wb.Name) Then _
dictWorkbooks.Remove Wb.Name
End Sub