VBAでは「On Error Resume Next」を使ってエラーを無視して処理を続行させることは多いです。
ですが、「On Error Resume Next」を解除する方法はどうすればよいのでしょうか?
今回は、「On Error Resume Next」を解除する方法について徹底的に説明していきます。
On Error Resume Nextを解除する方法
On Error Resume Nextの有効範囲
VBAではエラーが発生したときに、エラーを無視して処理を続行させるためにOn Error Resume Next ステートメントを使います。
このステートメントの有効範囲は、このステートメントを記述した以降(記述した行より下)からEnd Subまでになります。
コード中にOn Error Resume Nextを記述すると、End Subまで有効になるのです。
それでは、これらのステートメントの解除方法について次の項目で説明していきます。
エラー無視を解除する方法:On Error GoTo 0
On Error Resume Nextを解除するには、「On Error GoTo 0 ステートメント」を使います。
使い方は、解除したい場所に On Error GoTo 0 と記述します。
On Error GoTo 0 を記述した行以降(記述した行より下)では、エラー無視(つまりOn Error Resume Next)が解除され、エラーが発生した場合にはエラーメッセージが表示されるようになります。
使い方のサンプルコードは以下のとおりです。
ここでは、アクティブシートの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 Resume Nextを解除した後、再度On Error Resume Nextを設定する方法
On Error GoTo 0でエラー無視を解除した後に、再度On Error Resume Nextを設定したい場合はどのようにすればよいのでしょうか?
答えは簡単で、On Error Resume Next を設定したい箇所に再度 On Error Resume Next を記述すればよいのです。
On Error Resume Next(エラー無視) → 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 Resume Next」を使ってエラー無視に設定した場合の解除方法は、On Error GoTo 0 ステートメントを記述することで、エラー無視を解除することができます。
参考:Excel VBA入門 その78:エラー無視を解除する方法
コメント
[…] 参考:Excel VBA入門 その79:On Error Resume Next を解除する方法 […]