はじめに
ひらちんです。
VBAのマクロ実行中に、”Escキー”を押されるとマクロが強制的に停止してデバッグモードになってしまます。
開発者の場合は分かっているので便利ですが、ユーザーがマクロ起動中に誤って”Esc”を押してしまうとデバッグモードになってしまい、どうしたら良いか分からなくなってしまいます。
今回は、そんなときのために”Escキー”が押されたときの挙動の制御方法を紹介します!
EnableCancelKeyプロパティ
ApplicationオブジェクトのEnableCancelKeyプロパティの値を、”xlErrorHandler”に設定すると、”Escキー”が押されたときに、エラーを発生させるように出来ます。
このエラーは、エラーハンドルで捕まえることが出来るので、それを使ってEscキーが押されたときの挙動を制御します。
※Application.EnableCancelKeyプロパティは他にも、「xlDisabled:割り込みを無視する」、「xlInterrupt:実行中のプロシージャを停止(デフォルト)」がありますが、 xlDisabled に設定した場合、無限ループなどに陥ってしまった場合止める方法が無くなるので注意してください。
それでは次のコードをご覧ください。
Sub sample()
'Escキーが押されたらエラーが発生するようにする
Application.EnableCancelKey = xlErrorHandler
'エラーが発生したら、catchラベルに行く
On Error GoTo catch
'無限ループを発生させる
Dim i As Long: i = 1
Do While i > 0
Debug.Print i
i = i + 1
Loop
catch:
MsgBox "Escキーが押されました"
End Sub
このコードでは、最初に「Application.EnableCancelKey」プロパティを「xlErrorHandler」に設定して、Escキーが押されたときにエラーが発生するよにしています。
On Error GoTo でエラーが発生したときの処理で、Escキーが押されたら、Escキーが押されたら「Escキーが押されました」のメッセージを表示してプログラムを終了するようにしています。
無限ループを発生させているので、Escキーが押されるまでプログラムが終了することはありません。
では、挙動を確認してみましょう。
動画ではEscキーが押されたことはわかりませんが、押してますw
これで、誤ってEscキーが押されてもきちんとプログラムが終了するように出来ました(^o^)
コメント