教えて!ExcelVBA!

ExcelVBAの基礎知識・書き方について紹介します。

【ExcelVBA ブック操作】ブックを保存する時に発生するイベントプロシージャを作成するにはどうすればいいの?教えて!

構文

構文は以下の通りです。

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
    ' 実行したい処理をここに記述します
End Sub

解説

Workbook_BeforeSaveイベントプロシージャは、ブック(Excelファイル)が保存される前に実行されます。引数は以下の内容となります。

引数 内容
SaveAsUI 保存ダイアログが表示されるかどうかを示す真偽値(True/False)です。Trueの場合、保存ダイアログが表示され、ユーザーが保存場所やファイル名を指定することができます。Falseの場合、ダイアログが表示されず、既定の場所にファイルが保存されます。
Cancel 保存処理をキャンセルするかどうかを示す真偽値です。Trueを指定すると保存処理がキャンセルされ、Falseを指定すると通常通り保存が行われます。

プログラミング例

例として、ブックが保存される前に特定のセルに値が入力された場合、自動的に日付を挿入する処理を作成してみましょう。

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
    Dim targetCell As Range
    Set targetCell = ThisWorkbook.Sheets("Sheet1").Range("A1") ' 監視するセルの範囲を指定
    If targetCell.Value <> "" Then
        targetCell.Offset(0, 1).Value = Date ' 現在の日付を挿入
    End If
End Sub

上記のプログラムをWorkbookのイベントプロシージャであるWorkbook_BeforeSaveに記述することで、保存前に指定したセルに入力があった場合に自動的に日付が挿入されます。

まとめ

Workbook_BeforeSaveイベントプロシージャは、ブックが保存される前に特定の処理を実行するためのものです。これを利用することで、データの妥当性チェックや自動バックアップなどの機能を追加することができます。