On Error文

d

エラー処理を有効化または無効化します。

構文

On Error Resume Next

On Error GoTo 0

備考

コード内のどこにもOn Error Resume Next文を使用しない場合は、発生するランタイム・エラーにより、エラー・メッセージが表示され、コード実行が停止する可能性があります。ただし、コードを実行しているホストが正確な動作を決定します。ホストは、このようなエラーを別の方法で処理する場合があります。場合によっては、エラーの時点でスクリプト・デバッガを起動できます。それ以外のケースでは、ホストがエラーが発生したことをユーザーに通知しないため、エラーが発生したことを示す明らかな兆候がない場合があります。これは単に、発生したエラーをホストがどのように処理するかを示す関数です。

どのプロシージャでも、エラー処理がコール・スタックのどこかで有効になっている場合、エラーは必ずしも致命的ではありません。プロシージャでローカル・エラー処理が有効になっていない場合、エラーが発生すると、エラー処理が有効になっているプロシージャが検出され、その時点でエラーが処理されるまで、制御がコール・スタックを介して戻されます。エラー処理が有効になっているプロシージャがコール・スタックに見つからない場合は、その時点でエラー・メッセージが表示され、実行が停止するか、ホストがエラーを適切に処理します。

On Error Resume Nextでは、ランタイム・エラーの原因となった文の直後に文を実行するか、On Error Resume Next文を含むプロシージャから直近のコールの直後に文を実行して続行します。これにより、ランタイム・エラーにもかかわらず実行を続行できます。その後、プロシージャ内でエラー処理ルーチンをインラインで構築できます。

On Error Resume Next文は別のプロシージャがコールされると非アクティブになるため、そのルーチン内でインライン・エラー処理を行う場合は、コールされた各ルーチンでOn Error Resume Next文を実行する必要があります。プロシージャが終了すると、エラー処理機能は、終了したプロシージャに入る前に所定のエラー処理に戻ります。

以前にエラー処理をOn Error Resume Nextを使用して有効にした場合、エラー処理を無効にするにはOn Error GoTo 0を使用します。

次の例は、On Error Resume Next文の使用方法を示しています。

On Error Resume Next  ' Ignore errors and continue execution
' Attempt to divide by zero (this will cause an error)
Dim result
result = 10 / 0
err1 = Err.Number
' Check if an error occurred
If  err1 <> 0 Then
    Err.Clear  ' Clear the error
End If
' Script continues after error handling.

説明:

  • 行「result = 10 / 0」で、ゼロによる除算エラーが発生します。

  • On Error Resume Nextがアクティブであるため、スクリプトは停止せず、Err.Numberを使用してエラーを確認します。

  • 次に、処理後にErr.Clearを使用してエラーをクリアします。

重要事項:

  • Err.Number: このプロパティは、エラーが発生した場合にエラー・コードを保持します。エラーが発生していない場合は0になります。

  • Err.Description: 最後に発生したエラーの説明を提供します。

  • Err.Clear: エラー処理後にエラー情報をクリアするため、後続のエラーはスクリプトに影響しません。

例1:

On Error Resume Next  ' Ignore errors and continue execution
' Attempt to divide by zero (this will cause an error)
Dim result
result = 10 / 0
err1 = Err.Number

On Error GoTo 0  ' Default error handling is restored
' Now, any error that occurs will stop the script

result = 10 / 0 'Error will be thrown