Excel VBA入門 その78:エラー無視を解除する方法

エクセルVBA VBA



VBAでは「On Error Resume Next」や「On Error GoTo 行ラベル」を使ってエラーを無視して処理を続行させることは多いです。

ですが、エラー無視を解除する方法はどうすればよいのでしょうか?

今回は、エラー無視を解除する方法について徹底的に説明していきます。



エラー無視を解除する方法

VBAではエラーが発生すると処理が中断する

エラーはどうやって無視しているのか

VBAではエラーが発生したときに、エラーを無視して処理を続行させるために

  • On Error Resume Next ステートメント
  • On Error GoTo 行ラベル ステートメント

を使います。

このステートメントの有効範囲は、このステートメントを記述した以降(記述した行より下)です。

それでは、これらのステートメントの解除方法について次の項目で説明していきます。

エラー無視を解除する方法:On Error GoTo 0

エラー無視を解除するには、「On Error GoTo 0 ステートメント」を使います。

使い方は、エラー無視を解除したい場所に On Error GoTo 0 と記述します。

On Error GoTo 0 を記述した行以降(記述した行より下)では、エラー無視が解除され、エラーが発生した場合にはエラーメッセージが表示されるようになります。

使い方のサンプルコードは以下のとおりです。

ここでは、アクティブシートの1つ前にあるワークシートをアクティブにして、ワークシート名を表示します。。。が、1つ目のワークシートで実行するとエラーになるコードです。

Sub エラーテスト()
    On Error Resume Next  'この行より下ではエラー無視する
    
    ActiveSheet.Previous.Activate '
    MsgBox ActiveSheet.Name & ":1回目成功"

    On Error GoTo 0    'この行より下ではエラー無視が解除される
    
    ActiveSheet.Previous.Activate '
    MsgBox ActiveSheet.Name & ":2回目成功"

End Sub

実行すると、On Error Resume Next でエラー無視をした1回目はメッセージボックスが表示されますが、On Error GoTo 0 でエラー無視を解除した場合の2回目は、エラーが出て処理が中断するようになります。

On Error GoTo 0でエラー解除をしたから2回目はエラーになる

エラー無視を解除した後、再度エラー無視をする方法

On Error GoTo 0でエラー無視を解除した後に、再度エラー無視をしたい場合はどのようにすればよいのでしょうか?

答えは簡単で、エラー無視をしたい箇所に再度 On Error Resume Next を記述すればよいのです。

エラー無視 → エラー無視解除 → 再度エラー無視 という流れのサンプルコードは以下のとおりです。

Sub エラーテスト()
    On Error Resume Next  'この行より下ではエラー無視になる
    
    ActiveSheet.Previous.Activate '
    MsgBox ActiveSheet.Name & ":1回目成功"

    On Error GoTo 0    'この行より下ではエラー無視が解除される
    
    ' ~ 処理 ~
        
    On Error Resume Next  'この行より下ではエラー無視になる
    
    ActiveSheet.Previous.Activate '
    MsgBox ActiveSheet.Name & ":2回目成功"

End Sub

実行すると、「2回目成功」のメッセージボックスが表示され、最終的にOn Error Resume Next が有効になっていることがわかります。

【まとめ】エラー無視を解除する方法

「On Error Resume Next」や「On Error GoTo 行ラベル」を使ってエラー無視に設定した場合の解除方法は、On Error GoTo 0 ステートメントを記述することで、エラー無視を解除することができます。

コメント

  1. […] 参考:Excel VBA入門 その78:エラー無視を解除する方法 […]

タイトルとURLをコピーしました