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イベントを紹介します。