時間がかかる処理をする場合、途中で停止できるようにしておくと便利です。
ApplicationオブジェクトのEnableCancelKeyプロパティにxlErrorHandlerを指定することにより、エラーを発生させて処理を中断することができます。
ESCを記入してマクロを停止(エラー処理)できるようにする
Sub ESCを押したらエラーを発生()
Dim i As Long, j As Integer
'ESCを押すとエラーを発生----
Application.EnableCancelKey = xlErrorHandler
On Error GoTo myError
'---------------------------
’処理を記入:
’エラーが発生したら下のmyErrorに移動
'エラー---------------------------
myError:
If Err.Number = 18 Then
If MsgBox("マクロを終了しますか?", 292) = vbNo Then
DoEvents
Resume
End If
Else
MsgBox "エラー発生" & vbCrLf & _
Err.Description, vbCritical
End If
'----------------------------------
End Sub
その他、エラーを回避する方法
1.On Error Resume Next
ステートメントを使用するOn Error Resume Next
ステートメントを使用することで、エラーが発生した場合でも、エラーを無視して次の処理を続行することができます。ただし、この方法は、エラーを無視することになるため、注意が必要です。以下は例です。
On Error Resume Next
'エラーが発生する可能性のある処理
On Error GoTo 0
2.On Error GoTo
ステートメントを使用するOn Error GoTo
ステートメントを使用することで、エラーが発生した場合に、指定したエラー処理ルーチンにジャンプして処理を続行することができます。以下は例です。
On Error GoTo ErrorHandler
'エラーが発生する可能性のある処理
Exit Sub
ErrorHandler:
'エラー処理
Resume Next
3.If...Then...Else
ステートメントを使用するIf...Then...Else
ステートメントを使用して、エラーが発生した場合に、処理をスキップすることができます。以下は例です。
If IsError(someVariable) Then
'エラー処理
Else
'正常な処理
End If
4.IsNumeric
関数を使用するIsNumeric
関数を使用して、数値以外の値が入力された場合に、エラーを回避することができます。以下は例です。
If IsNumeric(someVariable) Then
'数値の場合の処理
Else
'数値以外の場合の処理
End If
5.If...Then...ElseIf
ステートメントを使用するIf...Then...ElseIf
ステートメントを使用して、複数の条件を指定してエラーを回避することができます。以下は例です。
If someVariable = 0 Then
'someVariableが0の場合の処理
ElseIf someVariable < 0 Then
'someVariableが負の場合の処理
Else
'someVariableが正の場合の処理
End If
以上のように、VBAでは、様々な方法でエラーを回避することができます。ただし、エラーを無視する場合は、プログラムの動作に影響を与える可能性があるため、注意が必要です。また、可能な限りエラーを回避するようにプログラムを設計することが望ましいです。
コメント