BeforeCloseイベン卜

ブックが閉じる前に処理を実行するBeforeCloseイベン卜
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

もしすでに保存してあれば、「お疲れさまでした」とメッセージが表示されます。

BeforeCloseイベン卜-2

ブックが未保存の場合は、「保存して、閉じますか?」と表示して、処理をユーザーが選択するようになります。

BeforeCloseイベン卜-2

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