こんにちは、Ryoです。
普段何気なく実行している保存(Save)作業ですが、Excelのブックを保存する直前や保存後に対してもBeforeSave/AfterSaveイベントで処理を行うことができますので、今回はその内容について書いていこうと思います。
1.サンプル概要/サンプルコード
◆保存直前の処理
ブックを保存する際に「名前を付けて保存」をした場合、警告メッセージを表示して保存作業をキャンセルします。
Private Sub Workbook_BeforeSave(ByVal SaveAsUI _ As Boolean, Cancel As Boolean) 'BeforeSave : ブック保存前に処理を行うイベント '引数SaveAsUI : 保存処理が「名前を付けて保存」=True ' 「上書き保存」=False '引数Cancel : Trueにすることで保存処理をキャンセル '「名前を付けて保存」かどうかを確認 If SaveAsUI Then '「名前を付けて保存」であればメッセージ表示 MsgBox "「名前をつけて保存」はできません", vbCritical '保存処理をキャンセルする Cancel = True End If End Sub
保存直前のイベント処理を実行するには「BeforeSaveイベント」を使用し、「ブックモジュール」に記述します。
構文:
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean,
Cancel As Boolean)
statements
End Sub
引数のSaveAsUIは実行しようとしている保存の処理が「名前を付けて保存」の場合はTrue、「上書き保存」の場合はFalseになります。
また、引数CancelをTrueにすると保存する処理をキャンセルすることができます。
サンプルコードでは「名前を付けて保存」の処理ができないようにIf SaveAsUI Thenで判定し、Trueであれば引数CancelをTrueにして保存の処理をキャンセルしています。
◆保存後の処理
ブック保存後の処理はAfterSaveイベントを使用しますが、このイベント処理はExcel2010以降で使用可なのでご留意ください。
サンプルでは保存処理が正常に完了したかどうかを確認し、それぞれメッセージで表示しています。
≪保存処理の正常終了≫
≪保存処理の異常終了≫
Private Sub Workbook_AfterSave(ByVal Success _ As Boolean) 'AfterSave : ブック保存後に発生するイベント '引数Success : 保存が正常終了=True、 ' 保存されない場合=False '※このAfterSaveイベントは、Excel2010以降で使用可 '保存が正常終了されたかどうかを確認 If Success Then '保存処理完了時のメッセージ表示 MsgBox "保存処理が完了しました", vbInformation Else '保存されない場合でのメッセージ表示 MsgBox "保存できませんでした。確認をお願いします。", vbCritical End If End Sub
構文:
Private Sub Workbook_AfterSave(ByVal Success As Boolean)
statements
End Sub
正常に保存処理が終了した場合は引数SuccessはTrueになり、保存されなかった場合はFalseになりますので、サンプルコードではIf Success Thenで判定しています。
2.まとめ
今回のBeforeSaveイベントやAfterSaveイベントは一見使い難いような感じがしますが、例えばBeforeSaveイベントであれば複製を防ぐ(上書きのみ可)ような形で使用したり、AfterSaveイベントは保存の正常完了を改めてチェックすることで未保存を防止する等、使いどころはありそうな気がします。
このようなイベント処理を知っておくと、意外と役に立つこともありますので機会があれば活用をご検討くださいませ。
以上、ブックの保存直前/保存後に処理を行う方法についてでした!今回の記事が何かの参考になれば幸いです。
Ryo