今回はVBAの書かれたファイルを閉じた時に、自動でマクロが実行される方法をご説明します。
ファイルを閉じた時にマクロを自動実行させる方法は「Workbook_BeforeClose」と「Auo_Close」の2つあります。
それぞれの違いや基本的な使用方法から、ご説明します。
また、ファイルを開く時に自動で実行する方法は「ファイルを開く時にマクロを実行する方法」をご覧下さい。
1.Workbook_BeforeCloseで実行する方法
Workbook_BeforeCloseを使用して、ファイルを閉じた時にマクロを自動で実行する方法です。
記述するモジュールはVBEの「Microsoft Excel Objects」の「ThisWorkbook」です。
下の画像の青線で囲われたモジュールです。
この「ThisWorkbook」を開きます。
開くと次のような「General」と「Declarations」となっています。
この「General」をクリックすると「Workbook」を選択できますので、「Workbook」にします。
すると、デフォルトで自動的に「Declarations」が「Open」となり、
Private Sub Workbook_Open()
End Sub
のコードも自動で生成されます。
「Private Sub Workbook_Open()
」のままでは開いた時に自動実行ですので、「Open」から「BeforeClose」に変更します。
「Private Sub Workbook_Open()
」は今回必要ないので削除して構いません。
「Private Sub Workbook_BeforeClose(Cancel As Boolean)」に呼び出したいプロシージャをCallするか、コードを記述します。
これで次回からファイルを閉じた際にマクロ実行が実行されます。
「Cancel = True」とすると、Closeイベントはキャンセルされ、ブックは閉じられません。
2. Workbook_BeforeCloseのサンプルコード
記述する場所と「Workbook_BeforeClose」を表示する方法がわかりましたので、簡単なサンプルコードをご紹介します。
次のコードは標準モジュールに記載しています。
このコードはファイルを閉じる時に未保存の場合はメッセージが表示されて保存します。
※通常はMsgBoxがあると実行がそこで停止してしまいますので、必要ありません。
Sub Sample1()
If ActiveWorkbook.Saved = False Then
MsgBox "未保存のため保存します。"
ActiveWorkbook.Save
End If
End Sub
次に上記の実行する方法で説明した通り、ThisWorkbookの「 Private Sub Workbook_BeforeClose(Cancel As Boolean) 」に「Call」で呼び出す記述します。
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Call Sample1
End Sub
これで閉じた際に、Sample1プロシージャが実行されます。