HOME > 即効テクニック > Excel VBA > その他関連のテクニック > マクロの実行を中断させない

即効テクニック

その他関連のテクニック

マクロの実行を中断させない

(Excel 2000/2002/2003)
● 概要 ●
マクロの実行中にCtrl + BreakキーやEscキーを押下するとマクロの実行を中断することができますが、ApplicationオブジェクトのEnableCancelKeyプロパティを利用すると、これらのキーの押下を制御することができます。
ただし、EnableCanceKeyプロパティにxlDisableを指定した場合、無限ループに入ってしまうと処理を中止することができなくなるので注意が必要です。


構文 オブジェクト.EnableCancelKey = 設定値
設定項目    内容
オブジェクト  WshShellオブジェクト
設定値     XlEnableCancelKeyクラスの定数

XlEnableCancelKeyクラスの定数
xlDisabled    割り込みを無視します
xlErrorHandler  エラーを発生します。エラー番号は18です
xlInterrupt    デバッグ等できるように実行を中断します


次のサンプルは、ループ処理の間にCtrl + BreakキーやEscキーを押下すると、エラーが発生しエラー処理ルーチンに処理が移ります。
このとき、エラー番号をチェックし、Ctrl + BreakキーやEscキーが押下された場合は、独自のキャンセル処理を行い、それ以外のエラーの場合は、エラーメッセージを表示します。


● サンプル ●
Sub Sample()
    Dim i As Long
    Application.EnableCancelKey = xlErrorHandler
    
    On Error GoTo ErrHdl
    For i = 1 To 30000
        Range("A" & i).Value = i
    Next
    
    Exit Sub
    
ErrHdl:
    If Err.Number = 18 Then
        If MsgBox("処理を中止しますか?", vbYesNo) = vbNo Then
            DoEvents
            Resume
        End If
    Else
        MsgBox "エラーが発生しました" & vbCrLf & Err.Description, vbCritical
    End If
End Sub


● ポイント ●
キャンセル処理ルーチン内で、DoEvents関数を利用しているのは、キャンセル時にメッセージボックスをきちんと非表示にするためです。