目次

レズーム

今回は、エラーが発生した場合でもマクロの処理を継続出来る VBA の記述をテストしてみたいと思います。

On Error Resume Next の記述で処理を継続出来る。
On Error Resume Next の記述で処理を継続出来る。

目次まで戻る

マクロの一例

「On Error Resume Next」を記述すると、エラーで処理が中断しないようです。

Sub エラーの内容をVBEのイミディエイトウィンドウに出力するマクロ()

    '「On Error Resume Next」の記述がない場合、[ 8 行目 ] でエラーが発生してマクロが停止します。

    On Error Resume Next 'エラー発生の場合も処理を継続出来る設定。
    
    Debug.Print "1 回目"
    Debug.Print Range("xxxxx1").Address '[ 8 行目 ] 'エラーが発生する記述
    Debug.Print "Err.Number = "; Err.Number
    Debug.Print "Err.Description = "; Err.Description
    
    Debug.Print "2 回目"
    Debug.Print Range("A1").Address 'エラーが発生しない記述
    Debug.Print "Err.Number = "; Err.Number
    Debug.Print "Err.Description = "; Err.Description
    
    Err.Clear '最後のエラー情報消去 'Err. 以下で取得可能な情報をリセット
        
    Debug.Print "3 回目"
    Debug.Print Range("A1").Address 'エラーが発生しない記述
    Debug.Print "Err.Number = "; Err.Number
    Debug.Print "Err.Description = "; Err.Description
    
    Debug.Print "4 回目"
    Debug.Print Sheet1.Shapes(0).Name 'エラーが発生する記述
    Debug.Print "Err.Number = "; Err.Number
    Debug.Print "Err.Description = "; Err.Description
    
    Debug.Print "完了"

End Sub

目次まで戻る

実行結果

VBE のイミディエイトウィンドウに以下のテキストが出力されました。

1 回目
Err.Number = 1004
Err.Description = 'Range' メソッドは失敗しました: '_Global' オブジェクト
2 回目
$A$1
Err.Number = 1004
Err.Description = 'Range' メソッドは失敗しました: '_Global' オブジェクト
3 回目
$A$1
Err.Number = 0
Err.Description =
4 回目
Err.Number = -2147024809
Err.Description = 指定したコレクションに対するインデックスが境界を超えています。
完了

1 回目は、エラーが発生する記述なので、エラーが発生していますが、「On Error Resume Next」の記述があるので次の処理に進みます。

2 回目は、エラーが発生しない記述ですが、前のエラーの情報が残っています。

3 回目は、「Err.Clear」した後なので、エラーの情報がリセットされています。

4 回目は、エラーが発生するので、エラー情報が更新されています。

目次まで戻る

テスト環境

  • Windows 10(64 ビット)
  • Microsoft Office Excel 2003

以上、閲覧ありがとうございました。

目次まで戻る

同じカテゴリの投稿(Excel VBA)

前後の投稿