Excel VBA ファイルを閉じる時にマクロを自動実行する方法

ExcelVBA-基礎編

今回は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プロシージャが実行されます。

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