教えて!ExcelVBA!

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

ExcelVBAでブックを保存する時に処理を実行する方法

構文

構文は以下の通りです。

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
    ' 保存前に実行されるコードをここに書きます
End Sub

解説

Workbook_BeforeSaveは、ブックが保存される直前に自動的に実行されるイベントです。SaveAsUIがTrueの場合は「名前を付けて保存」を行ったことを表し、Falseの場合は「上書き保存」を行ったことを表します。Cancelは、Trueに設定すると保存操作をキャンセルすることができます。

プログラミング例

具体的なプログラミング例を紹介します。

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
    If SaveAsUI = True Then
        Dim 保存先 As String
        保存先 = Application.GetSaveAsFilename(FileFilter:="Excelブック (*.xlsx), *.xlsx")
        If 保存先 <> "False" Then
            MsgBox "ブックを " & 保存先 & " に保存します。", vbInformation
        Else
            MsgBox "保存がキャンセルされました。", vbExclamation
            Cancel = True ' 保存をキャンセル
        End If
    Else
        MsgBox "通常の保存が行われます。", vbInformation
    End If
End Sub

上記のプログラムは、SaveAsUIを使って「名前を付けて保存」なのか「上書き保存」なのかを制御します。Trueの場合、ユーザーが「名前を付けて保存」を選んだことを意味します。この場合、Application.GetSaveAsFilenameメソッドを使って、ユーザーに保存先を選ばせます。ユーザーが保存先を選んだ場合、そのパスが表示され、選択をキャンセルした場合には保存がキャンセルされます。Falseの場合、通常の保存が行われることを知らせます。

まとめ

Workbook_BeforeSaveイベントは、ブックが保存される直前に自動的に実行されるイベントです。このイベントを活用することで、保存前に確認メッセージを表示したり、条件に応じて保存をキャンセルしたりすることができます。重要なデータを誤って上書きしてしまうことを防ぐために便利です。