目次

ゼロ

今回は、エクセルマクロ内のエラー処理を無効にする「On Error GoTo 0 」の記述をテストしてみたいと思います。

「On Error GoTo 0 」より上の行でエラー処理の記述をしていても「On Error GoTo 0 」より下の行では、エラー処理が無効になるようです。

VBA のエラー処理。 [ 3 ] のエラーは処理継続して [ 4 ] へ進む。 [ 6 ] のエラーは一旦「 a: 」にジャンプして [ 7 ] [ 8 ] と進んで一行下の [ 9 ] に戻る。 [ 11 ] のエラーでマクロ中断。
VBA のエラー処理。 [ 3 ] のエラーは処理継続して [ 4 ] へ進む。 [ 6 ] のエラーは一旦「 a: 」にジャンプして [ 7 ] [ 8 ] と進んで一行下の [ 9 ] に戻る。 [ 11 ] のエラーでマクロ中断。

目次まで戻る

On Error GoTo 0 を入れた場合の一例

下記マクロの、

[ 1 ] の「On Error Resume Next」より下の行でエラーが発生した場合、そのまま処理が継続されるようです。

[ 5 ] の「On Error GoTo a」より下の行でエラーが発生した場合、「a:」の行まで一旦ジャンプして「Resume Next」の命令文でエラー発生行の次の行まで戻ってきます。

[ 1 ] の「On Error Resume Next」の効力が無くなるようです。

[ 11 ] の「On Error GoTo 0」より下の行でエラーが発生した場合、エラーで処理が中断されます。 [ 1 ] と [ 5 ] のエラー処理が無効になるようです。

[ 8 ] の「Resume Next」が「Resume」になっていると、 [ 9 ] では無く [ 6 ] に戻ってしまい [ 6 ] ~ [ 8 ] を無限ループしてしまいます。

Sub On_Error_GoTo_0を入れた場合()

    '[ 1 ] から [ 12 ] の順番で処理されます。
'[ 12 ] でエラーが発生して処理が中断されます。
'エラーが発生する行を緑色に着色してあります。 On Error Resume Next '[ 1 ] Debug.Print Range("xxxxxx1").Address '[ 2 ] Debug.Print Err.Number '[ 3 ] Debug.Print Err.Description '[ 4 ] On Error GoTo a '[ 5 ] Debug.Print Range("xxxxxx1").Address '[ 6 ] Debug.Print Err.Number '[ 9 ] Debug.Print Err.Description '[ 10 ] On Error GoTo 0 '[ 11 ] Debug.Print Range("xxxxxx1").Address '[ 12 ] Debug.Print Err.Number Debug.Print Err.Description On Error GoTo b Debug.Print Range("xxxxxx1").Address Debug.Print Err.Number Debug.Print Err.Description Exit Sub a: Debug.Print "a: エラー発生" '[ 7 ] Resume Next '[ 8 ] b: Debug.Print "b: エラー発生" Resume Next End Sub

目次まで戻る

On Error GoTo 0 を入れない場合の一例

下記マクロの、

[ 1 ] より下の行でエラーが発生した場合、そのまま継続されます。

[ 5 ] より下の行でエラーが発生した場合、「a:」の行に一旦ジャンプして、「Resume Next」の命令文でエラーが発生した次の行に戻って来ます。

[ 16 ] より下の行でエラーが発生した場合、「b:」の行に一旦ジャンプして、「Resume Next」でエラーが発生した次の行に戻って来ます。

[ 22 ] の「Exit Sub」でマクロを終了します。この記述が無いと、そのまま下の行に進んで「a:」と「b:」の中の処理を行ってしまいます。

Sub On_Error_GoTo_0を入れない場合()

    '[ 1 ] から [ 22 ] の順番で処理されます。
'[ 22 ] のマクロ完了まで処理されます。 'エラーが発生する行を緑色に着色してあります。 On Error Resume Next '[ 1 ] Debug.Print Range("xxxxxx1").Address '[ 2 ] Debug.Print Err.Number '[ 3 ] Debug.Print Err.Description '[ 4 ] On Error GoTo a '[ 5 ] Debug.Print Range("xxxxxx1").Address '[ 6 ] Debug.Print Err.Number '[ 9 ] Debug.Print Err.Description '[ 10 ] 'On Error GoTo 0 をコメントアウト(命令文をコメント化して実行しない) しました。 Debug.Print Range("xxxxxx1").Address '[ 11 ] Debug.Print Err.Number '[ 14 ] Debug.Print Err.Description '[ 15 ] On Error GoTo b '[ 16 ] Debug.Print Range("xxxxxx1").Address '[ 17 ] Debug.Print Err.Number '[ 20 ] Debug.Print Err.Description '[ 21 ] Exit Sub '[ 22 ] a: Debug.Print "a: エラー発生" '[ 7 ] [ 12 ] Resume Next '[ 8 ] [ 13 ] b: Debug.Print "b: エラー発生" '[ 18 ] Resume Next '[ 19 ] End Sub

目次まで戻る

On Error GoTo 0 直下に On Error Resume Next を入れた場合の一例

Sub On_Error_GoTo_0直下にOn_Error_Resume_Nextを入れた場合()

'[ 1 ] から [ 6 ] の順番で処理されます。
'[ 6 ] のマクロ完了まで処理されます。
'エラーが発生する行を緑色に着色してあります。 On Error GoTo 0 '[ 1 ] On Error Resume Next '[ 2 ] Debug.Print Range("xxxxxx1").Address '[ 3 ] Debug.Print Err.Number '[ 4 ] Debug.Print Err.Description '[ 5 ] End Sub '[ 6 ]

目次まで戻る

On Error GoTo 0 直下に On Error GoTo 行ラベル を入れた場合の一例

Sub On_Error_GoTo_0直下にOn_Error_GoTo_行ラベルを入れた場合()

'[ 1 ] から [ 8 ] の順番で処理されます。
'[ 8 ] のマクロ完了まで処理されます。
'エラーが発生する行を緑色に着色してあります。 On Error GoTo 0 '[ 1 ] On Error GoTo a '[ 2 ] Debug.Print Range("xxxxxx1").Address '[ 3 ] Debug.Print Err.Number '[ 6 ] Debug.Print Err.Description '[ 7 ] Exit Sub '[ 8 ] a: Debug.Print "a: エラー発生" '[ 4 ] Resume Next '[ 5 ] End Sub

目次まで戻る

オー

On_Error_GoTo_O(オー)ではなく On_Error_GoTo_0(ゼロ)のようです。

Sub On_Error_GoTo_オーの場合()

    On Error GoTo 0 'ゼロ
    On Error GoTo O 'オー

End Sub
On_Error_GoTo_O(オー)の箇所でエラー発生。「コンパイルエラー 行ラベルが定義されていません。」
On_Error_GoTo_O(オー)の箇所でエラー発生。「コンパイルエラー 行ラベルが定義されていません。」

目次まで戻る

テスト環境

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

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

目次まで戻る

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

前後の投稿