私は既にこの問題に直面しています。 このように動作させることはありません。ロードされた "* .dotm"ファイルのContentControlOnExit
イベントのイベントだけを起動します。
マクロドキュメントの外で発生した変更に対応するには、かなり複雑な構文を使用する必要があります。これについて簡単に説明します。
変数Public WithEvents p_Document as Word.Document
を持つクラスclsDocument
を作成する必要があります。あなたのクラスの内部では、あなたは、あなたのp_Document
のイベントContentControlOnExit
に耳を傾け、あなたのケースで(そこにMsgBox ("Fired")
をあなたのコードを置く。
次に、あなたにも、一般的なイベント「のAutoExec」と「AutoOpenプロパティ」に耳を傾ける必要がありこれらのすべてのイベントでは、グローバル変数p_Document
を、イベントに渡されたドキュメントまたは(イベントハンドラに渡されたドキュメントがない場合)アクティブなドキュメントのいずれかの値に設定します。 これらのイベント反応は多かれ少なかれ同じことを行い、そのようなマクロのモジュールに新しいプロシージャを作成します:
次に、マクロファイルのThisDocument
に次の手順を作成します。
Option Explicit
Private g_clsWordApplication As clsApplication
Public Sub AutoExec()
Set g_clsWordApplication = New clsApplication
Set g_clsWordApplication.WordApplication = Word.Application
Call modYourModule.SetUpDocumentEvents
End Sub
Private Sub Document_New()
Call modYourModule.SetUpDocumentEvents
End Sub
Private Sub Document_Open()
Call modYourModule.SetUpDocumentEvents
End Sub
Public Sub AutoOpen()
Call modYourModule.SetUpDocumentEvents
End Sub
このように、ドキュメントイベントを捕捉できます。 AutoExec
の機能に見られるように、アプリケーションオブジェクトでは同じですが、新しいclsAplication
をWithEvents WordApplication as Word.Application
で作成し、イベントに反応することができます。このコードはすべてあなたのドットファイルに入っているので、グローバルなテンプレートファイルです。
このようにして、あなたが望むイベントに反応することができます。 私はこの問題を解決するための別の方法は見つけられませんでしたが、まだ実装する方法に満足していません。あなたの問題を解決するための別の選択肢がある場合は、別の方法で試してみることを強くお勧めします。
私は解決策はありませんが、なぜこのようなことは起こっていないのかを説明することです - イベントはアクティブなドキュメントに対して起動され、起動時のテンプレートは基本的にバックグラウンドで実行されるため、このドキュメントではイベントがトリガーされ、テンプレートではトリガーされません。 – Carrosive