教えて!ExcelVBA!

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

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

ブックを保存する時に発生するイベントプロシージャは「Workbook_BeforeSave」を使います。

構文

構文は以下の通りです。

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

解説

Workbook_BeforeSaveはブック(Excelファイル)が保存される前に実行されるため、このイベントプロシージャ内に処理を記述することで、保存前に特定の動作を行うことができます。引数のSaveAsUIは保存ダイアログが表示されるかどうかを示す真偽値(True/False)です。Trueの場合、保存ダイアログが表示され、ユーザーが保存場所やファイル名を指定することができます。Falseの場合、ダイアログが表示されず、既定の場所にファイルが保存されます。引数のCancelは保存処理をキャンセルするかどうかを示す真偽値です。Trueを指定すると保存処理がキャンセルされ、Falseを指定すると通常通り保存が行われます。

使い方

Workbook_BeforeSaveを使うことで、例えば以下のような処理を実行することができます。

1.ブックが保存される前に入力内容の妥当性チェックを行い、不正なデータがあれば保存をキャンセルする。
2.特定のセルに値が入力された場合、自動的に日付を挿入する。
3.ブックが保存される前に自動バックアップを作成する。

プログラミング例

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

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