BeforeCloseイベントを無効にするには?

Question 53.1   Previous Next
VBAからbeforecloseイベントを出さない方法がわかりません。Applicaton.EnableEvents=False以外に方法がありますか?
よろしくお願いいたします。
Answer   Copyright (C) 2002.5.1 永井善王
Workbook_BeforeCloseイベントについてのご質問ですね。
school このイベントはユーザーがブックを閉じる操作を行うと
必ず発生します。
そのため、イベントプロシージャを作成しておけば、ブックを閉じる直前に必要な処理を行うことが可能になりますし、作成しておかなければイベントが発生しても追加の処理は行われません。

また、EnableEventsプロパティは、指定されたオブジェクトに対してイベントを発生させるかどうかを設定できますが、ユーザー操作により発生するイベントを無効にすることは、できないかと思います。

これらを勘案しますと、あなたの場合は、Workbook_BeforeCloseイベントプロシージャが作成してあるが、それを動作させてよい場合と、動作させたくない場合があるために、「イベントを出さない方法」を知りたいのかと思います。
言いかえると、ユーザーが不用意にブックを閉じれないようにしたいのでしょうか。

イベントプロシージャの中で、そのイベントをキャンセルする方法については、[ショートカットキーと右クリックを無効にするには?]のページの中に「マウスの右クリックを無効にする方法」として解説しています。

仮にそれを応用するならば、ThisWorkbookのコード画面で下記のように記述することになります。
Private Sub Workbook_BeforeClose(Cancel As Boolean)
    Cancel = True
End Sub
このマクロがあると、ブックを閉じるイベントが発生しなかったかのようになります。

以上が回答となりますが、このままでは、どのように操作しても、そのブックは閉じれなくなります。
そのため、条件を満足する場合だけはブックを閉じれるように、言いかえると Cancel=True をしないように、マクロを組んでおく必要があるかと思います。工夫してみてください。
  (私も近く出版する本の中で、その方法を解説する予定で執筆中です。うまく工夫できましたらご連絡ください。)

 

Excel VBA Macro