【VBA】ブックを保存する直前にマクロを自動実行する

ブックを保存する直前
 ・マクロを自動的に実行
できます!

BeforeSaveイベントを利用することで
実現します!
※Before(前に)Save(保存)イベントです。

PR

BeforeSaveイベントとは

ブックを保存する操作をした際に、保存する直前に発生するイベントです。

BeforeSaveイベントが発生すると、
 ・Excelが
 ・Subプロシージャ「Workbook_BeforeSave」を
 ・自動的に実行
してくれます。

よって
 ・Subプロシージャ「Workbook_BeforeSave」を作成することで
 ・ブックを閉じる操作をした際に、保存する直前にマクロが自動実行される
ようになります。

Subプロシージャ「Workbook_BeforeSave」の中に、「ブックを保存する直前に自動実行したい処理」を記述します。


Subプロシージャ「Workbook_BeforeSave」は
 ・「ThisWorkbook」モジュール内に作成
する必要があります。

「ThisWorkbook」モジュール
「ThisWorkbook」モジュール
PR

VBAコード

ここでは例として
 ・デスクトップ配下の「sampl_001.xlsm」の
 ・「ThisWorkbook」モジュール内のSubプロシージャ「Workbook_BeforeSave」の中に
 ・VBAコードを記述
します。

デスクトップ配下の「sampl_001.xlsm」
デスクトップ配下の「sampl_001.xlsm」

記述するVBAコードは
 ・「名前を付けて保存」の場合は保存をキャンセル
 ・メッセージ『「名前を付けて保存」をキャンセルしました!』を表示
とします。

「ThisWorkbook」モジュールの下記のプルダウンに「Workbook」と「BeforeSave」を指定にすれば、Subプロシージャ「Workbook_BeforeSave」が自動的に作成されます。

自動的に作成されたSubプロシージャ「Workbook_BeforeSave」
自動的に作成されたSubプロシージャ「Workbook_BeforeSave」


自動的に作成された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

引数「SaveAsUI」により、「上書き保存」か「名前を付けて保存」かを判断できます。
※引数「SaveAsUI」が「True」の場合は「名前を付けて保存」です。

引数「Cancel」に「True」を設定することで、保存をキャンセルできます(6行目)。

PR

実行結果

ブックを保存する直前にマクロを自動実行できました。

デスクトップ配下の「sampl_001.xlsm」 を「名前を付けて保存」をすると
 ・保存がキャンセルされ
 ・メッセージ『「名前を付けて保存」をキャンセルしました!』が表示
されました。

実行結果
実行結果
PR

参考

BeforeSaveイベントの詳細は、公式サイトをご確認ください。