Wordでイベントに応じてマクロを実行

Wordでは、ドキュメントを開いたり閉じたりするイベントに応じて、マクロを実行させることができます。
例えば次のようなイベントがあります。
Application.DocumentOpen イベント
Application.DocumentBeforePrint イベント
Application.DocumentBeforeSave イベント
Application.DocumentBeforeClose イベント

このうち、ドキュメントを保存するときに発生する「DocumentBeforeSave イベント」について説明します。
サンプルはWordのヘルプに記載されているものをそのまま使います。ただし単純に貼り付けただけでは動きません。Word2007で確認しました。

サンプル

Public WithEvents appWord As Word.Application
Private Sub appWord_DocumentBeforeSave(ByVal Doc As Document, SaveAsUI As Boolean, Cancel As Boolean)
    Dim intResponse As Integer
    intResponse = MsgBox("Do you really want to save the document?", vbYesNo)
    If intResponse = vbNo Then Cancel = True
End Sub

エディタを開く

Wordで開発-コード-VisualBasicを選択しエディタ(MicrosoftVisualBasic)を開く。

イベントの設定

イベントに応答するオブジェクト変数を宣言し、そのイベントが起きたときに実行するコードを書きます。
プロシージャの名前は「オブジェクト名_イベント名」となります。

プロジェクトエクスプローラで編集したい「Project」を選択。
挿入-クラスモジュールを選択。「Class1」が開く。
クラスモジュールに次の通り入力。※オブジェクト名「myapp」は任意。

Public WithEvents myapp As Word.Application

クラスモジュールの上部左側のオブジェクトボックスから「myapp」を選択。
右側のプロシージャボックスから「DocumentBeforeSave」を選択。
クラスモジュールに次の通り自動的に入力される。この中にコードを記述。

Private Sub myapp_DocumentBeforeSave(ByVal Doc As Document, SaveAsUI As Boolean, Cancel As Boolean)
End Sub

オブジェクトの初期化

イベントとそれに結びつくプロシージャを書きましたが、このままでは動きません。
「このイベントが発生したら動け」という指示を与える必要があります。
つまりドキュメントを開いたら、このマクロを実行しないと動きません。

プロジェクトエクスプローラで編集している「Project」を選択。
挿入-標準モジュールを選択。「Module1」が開く。
標準モジュールに次の通り入力。

Dim X As New Class1
Sub Register_Event_Handler()
    Set X.myapp = Word.Application
End Sub

コメント

タイトルとURLをコピーしました