![](https://excel-vba.work/wp-content/themes/cocoon-master/images/b-woman.png)
ブックを保存する直前に
・マクロを自動的に実行
できます!
![](https://excel-vba.work/wp-content/themes/cocoon-master/images/b-woman.png)
BeforeSaveイベントを利用することで
実現します!
※Before(前に)Save(保存)イベントです。
BeforeSaveイベントとは
ブックを保存する操作をした際に、保存する直前に発生するイベントです。
BeforeSaveイベントが発生すると、
・Excelが
・Subプロシージャ「Workbook_BeforeSave」を
・自動的に実行
してくれます。
よって
・Subプロシージャ「Workbook_BeforeSave」を作成することで
・ブックを閉じる操作をした際に、保存する直前にマクロが自動実行される
ようになります。
Subプロシージャ「Workbook_BeforeSave」は
・「ThisWorkbook」モジュール内に作成
する必要があります。
![「ThisWorkbook」モジュール](https://excel-vba.work/wp-content/uploads/2021/09/vba_event_open_001.png)
VBAコード
ここでは例として
・デスクトップ配下の「sampl_001.xlsm」の
・「ThisWorkbook」モジュール内のSubプロシージャ「Workbook_BeforeSave」の中に
・VBAコードを記述
します。
![デスクトップ配下の「sampl_001.xlsm」](https://excel-vba.work/wp-content/uploads/2021/09/vba_event_open_003.png)
記述するVBAコードは
・「名前を付けて保存」の場合は保存をキャンセル
・メッセージ『「名前を付けて保存」をキャンセルしました!』を表示
とします。
自動的に作成されたSubプロシージャ「Workbook_BeforeSave」の中に、VBAコードを記述します。
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
'「名前を付けて保存」かどうかを確認
If SaveAsUI Then
'保存をキャンセル
Cancel = True
MsgBox ("「名前を付けて保存」をキャンセルしました!")
End If
End Sub
実行結果
ブックを保存する直前にマクロを自動実行できました。
デスクトップ配下の「sampl_001.xlsm」 を「名前を付けて保存」をすると
・保存がキャンセルされ
・メッセージ『「名前を付けて保存」をキャンセルしました!』が表示
されました。
![実行結果](https://excel-vba.work/wp-content/uploads/2021/10/vba_event_BeforeSave_002.png)
参考
BeforeSaveイベントの詳細は、公式サイトをご確認ください。