すぐに役立つエクセルVBAマクロ集 - すぐマク
Home
>
Excel VBA Macro ブックシート
> FAQ
Home
What's New!
Gallery
Introduction
Service
Profile
Site Search
BeforeCloseイベントを無効にするには?
Question
53.1
VBAからbeforecloseイベントを出さない方法がわかりません。Applicaton.EnableEvents=False以外に方法がありますか?
よろしくお願いいたします。
Answer
Copyright (C) 2002.5.1 永井善王
Workbook_BeforeCloseイベントについてのご質問ですね。
このイベントはユーザーがブックを閉じる操作を行うと
必ず
発生します。
そのため、イベントプロシージャを作成しておけば、ブックを閉じる直前に必要な処理を行うことが可能になりますし、作成しておかなければイベントが発生しても追加の処理は行われません。
また、EnableEventsプロパティは、指定されたオブジェクトに対してイベントを発生させるかどうかを設定できますが、ユーザー操作により発生するイベントを無効にすることは、できないかと思います。
これらを勘案しますと、あなたの場合は、Workbook_BeforeCloseイベントプロシージャが作成してあるが、それを動作させてよい場合と、動作させたくない場合があるために、「イベントを出さない方法」を知りたいのかと思います。
言いかえると、ユーザーが不用意にブックを閉じれないようにしたいのでしょうか。
イベントプロシージャの中で、そのイベントをキャンセルする方法については、[
ショートカットキーと右クリックを無効にするには?
]のページの中に「マウスの右クリックを無効にする方法」として解説しています。
仮にそれを応用するならば、ThisWorkbookのコード画面で下記のように記述することになります。
Private Sub Workbook_BeforeClose(Cancel As Boolean) Cancel = True End Sub
このマクロがあると、ブックを閉じるイベントが発生しなかったかのようになります。
以上が回答となりますが、このままでは、どのように操作しても、そのブックは閉じれなくなります。
そのため、条件を満足する場合だけはブックを閉じれるように、言いかえると Cancel=True をしないように、マクロを組んでおく必要があるかと思います。工夫してみてください。
(私も近く出版する本の中で、その方法を解説する予定で執筆中です。うまく工夫できましたらご連絡ください。)
Excel VBA Macro
開始終了
ブックシート
画面制御・行列
セル制御
範囲選択 クリア
値の操作
コピー
メッセージ
印刷
コントロール 1
コントロール 2
フロー制御
その他
関数.引数.定数
Copy Right © 1997-2018
Yoshioh Nagai
All rights reserved
よろしくお願いいたします。
そのため、イベントプロシージャを作成しておけば、ブックを閉じる直前に必要な処理を行うことが可能になりますし、作成しておかなければイベントが発生しても追加の処理は行われません。
また、EnableEventsプロパティは、指定されたオブジェクトに対してイベントを発生させるかどうかを設定できますが、ユーザー操作により発生するイベントを無効にすることは、できないかと思います。
これらを勘案しますと、あなたの場合は、Workbook_BeforeCloseイベントプロシージャが作成してあるが、それを動作させてよい場合と、動作させたくない場合があるために、「イベントを出さない方法」を知りたいのかと思います。
言いかえると、ユーザーが不用意にブックを閉じれないようにしたいのでしょうか。
イベントプロシージャの中で、そのイベントをキャンセルする方法については、[ショートカットキーと右クリックを無効にするには?]のページの中に「マウスの右クリックを無効にする方法」として解説しています。
仮にそれを応用するならば、ThisWorkbookのコード画面で下記のように記述することになります。 このマクロがあると、ブックを閉じるイベントが発生しなかったかのようになります。
以上が回答となりますが、このままでは、どのように操作しても、そのブックは閉じれなくなります。
そのため、条件を満足する場合だけはブックを閉じれるように、言いかえると Cancel=True をしないように、マクロを組んでおく必要があるかと思います。工夫してみてください。
(私も近く出版する本の中で、その方法を解説する予定で執筆中です。うまく工夫できましたらご連絡ください。)