構文
構文は以下の通りです。
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
' 保存前に実行されるコードをここに書きます
End Sub
' 保存前に実行されるコードをここに書きます
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
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イベントは、ブックが保存される直前に自動的に実行されるイベントです。このイベントを活用することで、保存前に確認メッセージを表示したり、条件に応じて保存をキャンセルしたりすることができます。重要なデータを誤って上書きしてしまうことを防ぐために便利です。