ブックの保存時にマクロを自動実行する方法を解説します。
保存の直前に実行したい場合はBeforeSaveイベント、
保存の直後に実行したい場合はAfterSaveイベントを使用します。
保存の直前に処理を実行する - BeforeSave
基本構文
以下のコードをThisWorkbookモジュールに記述します。
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean) ' ここに保存直前に実行したい処理を記載する End Sub
引数「SaveAsUI」は判定用の引数で、
Trueになっていれば「名前を付けて保存」、
Falseになっていれば「上書き保存」であることが分かります。
引数「Cancel」は設定用の引数で、
Trueを渡すことで保存を中止させることが出来ます。
サンプルコード
' 上書き保存を禁止するマクロ Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean) If SaveAsUI = False Then MsgBox "このマクロは上書き保存することはできません。" Cancel = True End If End Sub
解説
保存の直前に処理を実行するには、BeforeSaveプロシージャを使用します。
プロシージャ名、引数名を変更することはできません。
第1行は変更せずすべてこのままのコードを記述してください。
このプロシージャの引数Cancelを使用することで、
保存を中止させることも出来ます。
保存してよいかどうかを制御するマクロを作りたいときは、
このプロシージャを活用してください。
なお、このBeforeSaveプロシージャなどのイベントプロシージャは、
ThisWorkbookモジュールの上部選択肢から選ぶことが出来ます。


これを選択すると、↓の状態で空のイベントプロシージャが挿入されます。
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean) End Sub
イベントプロシージャの構文はWEB検索で探したりする必要はなく、
使うときにこの選択肢から選べばよいことを覚えておきましょう。
保存の直後に処理を実行する - AfterSave
基本構文
以下のコードをThisWorkbookモジュールに記述します。
Private Sub Workbook_AfterSave(ByVal Success As Boolean) ' ここに保存直後に実行したい処理を記載する End Sub
引数「Success」は判定用の引数で、
正常に保存が完了したかを判定することが出来ます。
サンプルコード
' 保存失敗をログに記憶するマクロ Private Sub Workbook_AfterSave(ByVal Success As Boolean) If Success = False Then Cells(1, 1) = "保存失敗:" & Format(Date, "yyyymmdd") End If End Sub
解説
保存の直後に処理を実行するには、AfterSaveプロシージャを使用します。
こちらは「保存が失敗したかどうか」を判定する機能があるため、
それを検知して記録する必要があるときなどに使用してください。
このプロシージャもBeforeSaveプロシージャと同様、
ThisWorkbookモジュールの上部選択肢から選ぶことが出来ます。
構文を覚える必要はありませんので、使用時はこの選択肢を活用してください。