VBA On Error Goto 0 | ExcelVBAでエラー時GoTo0を使用する方法は?

エラー時のExcelVBA Goto 0

VBA On Error GoTo 0は、プロシージャで有効なエラーハンドラを無効にするために使用されるエラーハンドラステートメントです。これは「エラーハンドラー無効化」と呼ばれます。

プログラミング言語でのエラー処理は、すべてのコーダーが理解する必要のあるマスタークラスです。VBAプログラミング言語もあり、このプログラミング言語でもエラー処理技術があります。「On Error Resume Next」はエラーハンドラーを有効にし、「On ErrorGoTo0」は有効なエラーハンドラーを無効にします。

「OnErrorResumeNext」と「OnErrorGoTo 0」はどちらも、コードの効率を上げるためにタンデムで使用する必要があるペアです。エラーを処理するには、「On Error Resume Next」ステートメントで開始する必要があり、このエラーハンドラーを終了するには、「On ErrorGoTo0」ステートメントを使用する必要があります。

これらのステートメントの間に記述されたラインコードは、手続きで発生したあらゆる種類のエラーを無視します。

On Error GoTo 0ステートメントの使用方法は?

このVBAOn Error Goto 0 Excelテンプレートはここからダウンロードできます– VBA On Error Goto 0Excelテンプレート

例については、以下のコードを見てください。

コード:

 Sub On_ErrorExample1()Worksheets( "Sheet1")。Select Range( "A1")。Value = 100 Worksheets( "Sheet2")。Select Range( "A1")。Value = 100 End Sub 

上記のコードは、最初に「Sheet1」という名前のワークシートを選択し、セルA1に値100を挿入します。

コード:

Worksheets( "Sheet1")。Select Range( "A1")。Value = 100

次に、「Sheet2」という名前のワークシートを選択し、同じ値を挿入します。

コード:

Worksheets( "Sheet2")。Select Range( "A1")。Value = 100

これで、ワークブックに以下のシートがあります。

「Sheet1」と「Sheet2」というシートはありません。コードを実行すると、次のようなエラーが発生します。

「Sheet1」という名前のシートがないため、「Subscriptoutofrange」エラーが発生しました。このエラーを処理するために、マクロの先頭にエラーハンドラステートメント「OnErrorResumeNext」を追加します。

コード:

 Sub On_ErrorExample1()On Error Resume Next Worksheets( "Sheet1")。Select Range( "A1")。Value = 100 Worksheets( "Sheet2")。Select Range( "A1")。Value = 100 End Sub 

次に、コードを実行して、何が起こるかを確認します。

エラーハンドラステートメントOnError Resume Nextが有効になっているため、エラーメッセージは表示されません。

ワークシート「Sheet1」が使用できない場合にエラーを無視する必要があるが、「Sheet2」というワークシートがない場合は通知する必要があるシナリオを想像してみてください。

上部にOnError Resume Nextを追加したため、エラーの処理が開始されましたが、同時に、このエラーを無視する必要がある行数を指定する必要があります。

この例では、最初のワークシートのエラーを無視する必要がありますが、2番目以降のシートでは、ワークシート「Sheet2」がない場合にエラーが発生する必要があります。したがって、最初のワークシートコードの後に​​、エラー無効化行On Error GoTo0を追加します。

コード:

 Sub On_ErrorExample1()On Error Resume Next Worksheets( "Sheet1")。Select Range( "A1")。Value = 100 On Error GoTo 0 Worksheets( "Sheet2")。Select Range( "A1")。Value = 100 End Sub 

次に、コードを1行ずつ実行して、F8キーを押して影響を確認します。

ここで、F8キーを押すと、コードの実行が次の行にジャンプし、アクティブな行のタスクが実行されます。これで、アクティブな行(黄色の行)が「OnError Resume Next」エラーハンドラーになり、エラーハンドラーが有効になります。

Now any error occurs it will be ignored until it executes the error handler disables code “On Error GoTo 0” statement.

In the previous attempt, we have encountered errors but press the F8 key one more time and see the magic.

Without giving any kind of error it has resumed execution of the code even though there is not worksheet “Sheet2” to select. Now press F8 again.

Since there was no Sheet1 it cannot insert the value in the A1 cell as 500 but what it does is it will insert the value of 500 to cell A1 whichever worksheet is active. My active sheet when I am executing the code was “Sheet3”, so the value of 100 is inserted to the cell A1.

Now the active line of code is “On Error GoTo 0”, by pressing the F8 key this line task will be executed.

Since “On Error GoTo 0” is executed it has stopped the process of error handling and again starts to show errors if any occurs. Press the F8 key and see the error.

In the previous case without On Error GoTo 0, it has ignored this error as well, but since we have added error handler disabler it has started to show the error again.

Things to Remember here

  • Both On Error Resume Next and On Error GoTo 0 needs to be used as “Error Handler Enabler” and “Error Handler Disabler”.
  • Any line of codes between these two statements encounters an error it will be ignored.
  • If there is On Error GoTo 0 statement then after the exit of the subprocedure error handler will be disabled.