VBAでは「On Error Resume Next」や「On Error GoTo 行ラベル」を使ってエラーを無視して処理を続行させることは多いです。
ですが、エラー無視を解除する方法はどうすればよいのでしょうか?
今回は、エラー無視を解除する方法について徹底的に説明していきます。
エラー無視を解除する方法
エラーはどうやって無視しているのか
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でエラー無視を解除した後に、再度エラー無視をしたい場合はどのようにすればよいのでしょうか?
答えは簡単で、エラー無視をしたい箇所に再度 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 ステートメントを記述することで、エラー無視を解除することができます。
コメント
[…] 参考:Excel VBA入門 その78:エラー無視を解除する方法 […]