和風スパゲティのレシピ

日本語でコーディングするExcelVBA

ブックを閉じるときにマクロを自動実行する - BeforeClose

ブックを閉じる際にマクロを自動で実行する方法を解説します。

BeforeCloseイベントを使用します。

基本構文

下記のコードを「ThisWorkbook」モジュールに記載すると、
ファイルを閉じようとした際、その直前に中の処理を実行します。

Private Sub Workbook_BeforeClose(Cancel as Boolean) 

    ' ここに実行したい処理を記述

End Sub

プロシージャ名、引数名を変更することはできません。

第1行は変更せずすべてこのままのコードを記述してください。


なお、このBeforeCloseを含めたイベントプロシージャは、
記述するThisworkbookやシートモジュールの上部選択肢から選ぶことが出来ます。

ThisWorkbookモジュール

BeforeCloseイベント


これを選択すると、↓の状態で空のイベントプロシージャが挿入されます。

Private Sub Workbook_BeforeClose(Cancel As Boolean)

End Sub

 
イベントプロシージャの構文はWEB検索で探したりする必要はなく、
使うときにこの選択肢から選べばよいことを覚えておきましょう。

条件によってブックを閉じるのを中止する

引数CancelにTrueを渡すことで、
ブックを閉じること自体をキャンセルすることが出来ます。

例えば以下のようなコードを書くことで、
「保存していない場合は閉じることが出来ないブック」
を設定することが可能です。

Private Sub Workbook_BeforeClose(Cancel as Boolean) 

    If ThisWorkbook.Saved = False Then
        MsgBox "未保存のためブックを閉じれませんでした。"
        Cancel = True
    End If

End Sub

イベントを実行させずにブックを閉じる

このイベントはマクロでブックを閉じた場合も実行されます。

ブックを閉じる際にBeforeCloseイベントを実行したくない場合は、
EnableEventsをFalseにしてからCloseメソッドを実行してください。

' BeforeCloseイベントを実行せずにブックを閉じる
Application.EnableEvents = False
対象ブック.Close False
Application.EnableEvents = True