ExcelVBA技
全般
E13M011
E13M011 (Excel2000~2013)
実行中のマクロを強制終了する
実行中のマクロを強制終了するには[Esc]キーを押します。(又は[Ctrl]+[Break]キーでも同様)
但し、この場合「コードの実行が中断されました」と表示されコードの継続処理(後処理)が出来なくなります。
[Esc]キーによる強制終了を出来ないようにマクロを記述するにはEnableCancelKeyプロパティにxlDisabledを設定します。
このプロパティは慎重に使用してください。このプロパティを xlDisabled に設定すると、無限ループのような、自ら停止しないプロシージャの場合は止めることができなくなります。
Application.EnableCancelKey = xlDisabled '強制終了を無視します
また、xlErrorHandler を設定すると、エラー処理ルーチンが Resume ステートメントで制御を戻すだけのものの場合はそのプロシージャを止めることができなくなります。
[Esc]キーによる強制終了を有効にするには次の様にxlInterruptを設定します。 なお、プロシージャが終了するとEnableCancelKeyプロパティは常にxlInterruptに戻されます。
Application.EnableCancelKey = xlInterrupt
[Esc]キーが押されて強制終了した時に何らかの後処理が必要な場合は、EnableCancelKeyプロパティにxlErrorHandlerを設定しエラートラップを行います。
xlErrorHandlerを設定すると実行中のプロシージャに対してエラー番号18が送られ、On Error GoTo ステートメントでトラップ出来ます。
以下にに使用例を示します。
'標準モジュール Option Explicit '[Esc]キーが押されて強制終了した時に何らかの後処理が必要な場合のエラートラップ例 Sub example_e13m011() Dim ii&, jj& On Error GoTo HandleErr AppActivate ActiveWindow.Caption Application.EnableCancelKey = xlErrorHandler MsgBox "この処理には時間がかかります。強制終了は[Esc]キーを押してください", , "example_e13m011" Application.DisplayStatusBar = True For ii = 1 To 1000 Application.StatusBar = "実行中です。 " & ii & "/1000" For jj = 1 To 1000000 ' Next Next Application.StatusBar = False Exit Sub HandleErr: If Err = 18 Then 'ESCが押された MsgBox "強制終了しました" & vbCrLf & ii & "/1000" '実際はここで後処理を記述 Else MsgBox "エラー:" & Err & vbCrLf & Error End If Application.StatusBar = False End Sub