On Errorステートメント

常マクロ実行中に致命的なエラーが発生すると、エラー発生個所でマクロの実行が中断してしまいます。ある程度エラーの発生が予測できるような場合、そのエラーを適切に処理して処理を継続させたいことがあります。このようなときに On Error ステートメントを使用して、エラー発生時の処理をコントロールします。

スポンサーリンク

On Error GoTo …

エラー発生時に指定のラベルへ移動します。移動先でエラーのハンドリングを行ったりします。

構文
On Error GoTo [ラベル名]

(何かしらの処理)

Exit Sub または Exit Function

[ラベル名]:
(エラー処理)
resume next    ' 処理を継続する場合に使用

次のマクロはエラーを強制的に発生させて、そのエラー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
     エラー内容 -> プロシージャの呼び出し、または引数が不正です。
  • エラーが発生しても処理を継続しているので、終了メッセージが表示されます。
    sample5_13の実行結果
    sample5_13の実行結果

On Error Resume Next

プロシージャ内で発生するエラーをすべて無視して処理を継続したい場合はプロシージャの先頭に以下のステートメントを記述します。

構文
On Error Resume Next

 On Error Resume Next の使用例 SpecialCells のエラー停止を回避する

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