常マクロ実行中に致命的なエラーが発生すると、エラー発生個所でマクロの実行が中断してしまいます。ある程度エラーの発生が予測できるような場合、そのエラーを適切に処理して処理を継続させたいことがあります。このようなときに On Error ステートメントを使用して、エラー発生時の処理をコントロールします。
On Error GoTo …
エラー発生時に指定のラベルへ移動します。移動先でエラーのハンドリングを行ったりします。
次のマクロはエラーを強制的に発生させて、そのエラーNoとエラー内容をイミディエイトウィンドウへ表示し、処理を継続する例です。
Sub sample5_13()
'エラーが発生した場合、ラベルErrProcへ処理を移します。
On Error GoTo ErrProc
Err.Raise 3 'エラーを強制的に発生させます。
Err.Raise 5 'エラーを強制的に発生させます。
MsgBox "処理が終了しました。", vbInformation
Exit Sub '以下のエラー処理が実行されないようにプロシージャを抜けます。
ErrProc:
Debug.Print "### エラー発生!! ###"
Debug.Print " エラーNo -> " & Err.Number
Debug.Print " エラー内容 -> " & Err.Description
Err.Clear '必要に応じてエラー内容をクリアします。
Resume Next 'エラーの発生した次の行から処理を継続します。
End Sub
- 実行結果(イミディエイトウィンドウ)
### エラー発生!! ### エラーNo -> 3 エラー内容 -> Return に対応する GoSub がありません。 ### エラー発生!! ### エラーNo -> 5 エラー内容 -> プロシージャの呼び出し、または引数が不正です。
- エラーが発生しても処理を継続しているので、終了メッセージが表示されます。
On Error Resume Next
プロシージャ内で発生するエラーをすべて無視して処理を継続したい場合はプロシージャの先頭に以下のステートメントを記述します。