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の実行は止まらないようにしておきたいところだ。
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
プログラムの実行が終わった後は、[Esc]キーあるいは[Ctrl]+[Break]キーで止められるように、「Application.EnableCancelKey = xlInterrupt」という行を挿入する。また途中でエラーが発生した場合も、同様に「xlInterrupt」を設定して終了するようにする。
「Application.EnableCancelKey = xlDisabled」を設定した場合、実行中のVBAを止めるにはExcelを強制終了させる必要がある。そのため、デバッグなどでVBAをよく止める場合には、xlInterruptのままにしておくこと。またエラーが発生したときに無限ループに陥らないよう、エラー処理にも注意を払う必要がある。
Copyright© Digital Advantage Corp. All Rights Reserved.