[Esc]キーによるExcel VBAの実行中断を防止する:Tech TIPS
ExcelではVBA(Visual Basic for Applications)によってさまざまな処理を自動的に実行できる。しかし、VBAの実行中にユーザーが[Esc]キーあるいは[Ctrl]+[Break]キーを押すと、自動処理が止まってしまう。止めたくない場合は、Application.EnableCancelKeyプロパティの設定を変更する。
対象ソフトウェア:Excel 2003/Excel 2007/Excel 2010
解説
Excelでは、マクロあるいはVBA(Visual Basic for Applications)と呼ばれる機能によって、さまざまな処理を自動的に実行できる。エンドユーザーによる判断や操作が不要な定型処理なら、VBAでプログラムを組むことで起動から処理完了まで完全に自動実行することも可能だ。
そうしたVBAのプログラムの実行中に、Excelに対して[Esc]キーあるいは[Ctrl]+[Break]キーを押すと、「コードの実行が中断されました」というダイアログが表示されて、処理が中断してしまう。VBAに詳しくないエンドユーザーがこれに遭遇しても、[継続]ボタンを押すといった適切な対処は期待できないだろう。そもそも、デバッグ中ならともかく本運用中なら、[Esc]キーを押してもVBAの実行は止まらないようにしておきたいところだ。
[Esc]キーを押すとExcel VBAの実行は止まる
Excel VBAの実行中に[Esc]キーを押すと、VBAの実行が中断するとともに、このダイアログが表示される。エラーではないのに自動実行を中止できるのは望ましくないし、VBAに詳しくないエンドユーザーが戸惑いそうなダイアログが表示されることも困った問題である。
Excel VBAには、[Esc]キーあるいは[Ctrl]+[Break]キーが押されたときの挙動を決めるプロパティ「Application.EnableCancelKey」が用意されている。本稿では、このプロパティを変更することで[Esc]/[Ctrl]+[Break]キーによる実行中断を防ぐ方法を説明する。
操作方法
[Esc]キーあるいは[Ctrl]+[Break]キーを押したときに、VBAの実行を止めるかどうかは、「Application.EnableCancelKey」というプロパティで設定できる。デフォルトでは、このプロパティには「xlInterrupt」という定数が設定されていて、VBAの実行を停止できるようになっている。これを「xlDisabled」という定数に変更すると、[Esc]/[Ctrl]+[Break]キーを押してもVBAの実行を止められなくなる。
具体的には、本来の自動処理プログラムのコードの前に「Application.EnableCancelKey = xlDisabled」という行を挿入する。
Public Sub Sample()
On Error GoTo handleError ……(1)
Application.EnableCancelKey = xlDisabled ……(2)
……(自動処理プログラムのコード)……
Application.EnableCancelKey = xlInterrupt ……(3)
Exit Sub
handleError:
Application.EnableCancelKey = xlInterrupt ……(4)
……(他のエラー処理)……
End Sub
Application.EnableCancelKeyプロパティの値を変えることで、VBAの実行を止められないようにできる。
(1)プログラム実行中にエラーが発生したら、この「handleError」にジャンプさせる。
(2)[Esc]/[Ctrl]+[Break]キーを押しても、プログラム実行を止めない設定。
(3)[Esc]/[Ctrl]+[Break]キーを押したら、プログラム実行を止める設定。こちらがデフォルトである。
(4)エラーが発生した場合も、プログラム実行を停止できる設定に戻す。
プログラムの実行が終わった後は、[Esc]キーあるいは[Ctrl]+[Break]キーで止められるように、「Application.EnableCancelKey = xlInterrupt」という行を挿入する。また途中でエラーが発生した場合も、同様に「xlInterrupt」を設定して終了するようにする。
VBAのエディタでApplication.EnableCancelKeyプロパティを設定しているところ
(1)もともとの自動処理プログラムの部分。前述のリストのようにApplication.EnableCancelKeyプロパティを設定する行は、この前後に挿入する。
●注意: VBAの実行を止めるには強制終了する必要がある
「Application.EnableCancelKey = xlDisabled」を設定した場合、実行中のVBAを止めるにはExcelを強制終了させる必要がある。そのため、デバッグなどでVBAをよく止める場合には、xlInterruptのままにしておくこと。またエラーが発生したときに無限ループに陥らないよう、エラー処理にも注意を払う必要がある。
Copyright© Digital Advantage Corp. All Rights Reserved.