BeforeCloseイベン卜
イベントマクロ 14回
Workbook_BeforeClose(Cancel As Boolean)
ブックを閉じるときに自動で処理するには「Workbook.BeforeClose」イベントを使います。
たとえば、ブックを閉じる時にメッセージを表示したい場合などに使うことができます。
このイベントは実際に閉じてしまう前なので、イベントプロシージャの中で閉じる動作をキャンセルすることも可能です。
Private Sub Workbook_BeforeClose(Cancel As Boolean) End Sub
ブックを自動で保存して閉じるには
1. ブックを保存しないで閉じようとすると、保存するかどうかを確認するメッセージが表示されます。でもこのメッセージが煩わしいと感じる方もいるでしょう。確認メッセージを出さずに、自動的に保存して閉じるか、あるいは保存しないで閉じるようにす ることができます。 次のプロシージャを作業するブックのThisWorkbookモジュールに記述してください。 す。
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Me.Save
End Sub
このMeというのは、コードが記述されている対象のオブジェクトを表します。ThisWorkbookモジュールに記述されているので、Workbookオブジェクトということになります。
ブックを自動で保存/非保存で閉じるには
2. 今度は逆に、変更されたくないブックもありますね。勝手に編集されて保存されたこまるブックです。そのようなブックの場合なら、閉じるときも保存させずに閉じてしまいましょう。
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Me.Saved = True
End Sub
WorkbookオブジェクトのSavedプロパティは、そのブックが保存されたか状態か、そうでないかを判断し、保存されていればTure、保存されてなければFalseを返します。記述したコードでは、実際は保存していませんが、Trueだと断定したことで、Excelはブックが保存済みとみなします。
ですから、保存せずに閉じてしまいます。
ブックを閉じるかどうが尋ねるには
3. ブックを閉じようとすると、保存してあれば、「おつかれさまでした」とメッセージを表示しましょう。もしその時に未保存であれば、「保存して、閉じますか?」と表示して、選択できるようにします。
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Dim ans As Long
If Me.Saved = True Then
MsgBox "お疲れ様でした"
Else
ans = MsgBox("ブックを保存して、閉じますか?", vbYesNoCancel)
If ans = vbYes Then
Me.Save
ElseIf ans = vbNo Then
ThisWorkbook.Saved = True
ElseIf ans = vbCancel Then
Cancel = True
End If
End If
End Sub
もしすでに保存してあれば、「お疲れさまでした」とメッセージが表示されます。
ブックが未保存の場合は、「保存して、閉じますか?」と表示して、処理をユーザーが選択するようになります。

次ぎは印刷前に実行するBeforePrintイベントを紹介します。
