2016-09-13 10 views
-1

以下のコードは、.dotmテンプレートファイルのThisDocumentワードオブジェクトに配置されています。ファイルを直接開くと、アクティブなドキュメントのコンテンツコントロールが終了するたびに、以下のイベントが発生します。ただし、テンプレートがスタートアップフォルダに配置され、自動的に開くと、イベントは発生しません。WordグローバルテンプレートVBA:Startupフォルダに配置するとContentControlOnExitイベントが発生しない

Startupフォルダから意図したとおりに動作するように修正する方法はありますか?

Private Sub Document_ContentControlOnExit(ByVal ContentControl As _ 
ContentControl, Cancel As Boolean) 
    MsgBox ("Fired") 
End Sub 
+0

私は解決策はありませんが、なぜこのようなことは起こっていないのかを説明することです - イベントはアクティブなドキュメントに対して起動され、起動時のテンプレートは基本的にバックグラウンドで実行されるため、このドキュメントではイベントがトリガーされ、テンプレートではトリガーされません。 – Carrosive

答えて

0

私は既にこの問題に直面しています。 このように動作させることはありません。ロードされた "* .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の機能に見られるように、アプリケーションオブジェクトでは同じですが、新しいclsAplicationWithEvents WordApplication as Word.Applicationで作成し、イベントに反応することができます。このコードはすべてあなたのドットファイルに入っているので、グローバルなテンプレートファイルです。

このようにして、あなたが望むイベントに反応することができます。 私はこの問題を解決するための別の方法は見つけられませんでしたが、まだ実装する方法に満足していません。あなたの問題を解決するための別の選択肢がある場合は、別の方法で試してみることを強くお勧めします。

+0

私はあなたが説明したものの基本的な概念を理解していると信じています。上記の私の質問に追加したコードを投稿しますが、クラスモジュールの経験は限られています。あなたはAutoExecや他の一般的なイベントを聴いていますか?これは、グローバルテンプレートファイルまたはアクティブなドキュメントに入りますか? – DGulledge

+0

@DGulledgeは私の答えを見て、私はそれを編集してより多くの情報を得ました。 – codeguy

関連する問題