On Error ステートメント (Visual Basic)On Error Statement (Visual Basic)

エラー処理ルーチンを有効にし、プロシージャ内のルーチンの場所を指定しますエラー処理ルーチンを無効にも使用できます。Enables an error-handling routine and specifies the location of the routine within a procedure; can also be used to disable an error-handling routine.

エラー処理せず、実行時に発生するは致命的なエラー: エラー メッセージが表示され、実行が停止します。Without error handling, any run-time error that occurs is fatal: an error message is displayed, and execution stops.

可能な限り、ことをお勧め非構造化例外処理を使用するのではなく、処理、コードの構造化例外を使用して、On Errorステートメントです。Whenever possible, we suggest you use structured exception handling in your code, rather than using unstructured exception handling and the On Error statement. 詳しくは、「Try...Catch...Finally ステートメント」をご覧ください。For more information, see Try...Catch...Finally Statement.

注意

Errorキーワードでも使用、 Error ステートメント、旧バージョンとの互換性のためサポートされています。The Error keyword is also used in the Error Statement, which is supported for backward compatibility.

構文Syntax

On Error { GoTo [ line | 0 | -1 ] | Resume Next }  

指定項目Parts

用語Term 定義Definition
GoTo lineGoTo line 要求で指定した行から開始するエラー処理ルーチンを有効にline引数。Enables the error-handling routine that starts at the line specified in the required line argument. line引数が任意の行ラベルまたは行番号。The line argument is any line label or line number. 実行時エラーが発生した場合は、エラー ハンドラーをアクティブにする際、指定した行に分岐を制御します。If a run-time error occurs, control branches to the specified line, making the error handler active. 指定した行と同じ手順である必要があります、On Errorステートメント、またはコンパイル時エラーが発生します。The specified line must be in the same procedure as the On Error statement, or a compile-time error will occur.
GoTo 0GoTo 0 現在のプロシージャで有効になっているエラー ハンドラーが無効になり、リセットNothingです。Disables enabled error handler in the current procedure and resets it to Nothing.
GoTo -1GoTo -1 現在のプロシージャで有効になっている例外を無効にしをリセットNothingです。Disables enabled exception in the current procedure and resets it to Nothing.
Resume Next 実行時エラーが発生したときに、エラーが発生し、そのポイントから実行が継続ステートメントの直後のステートメントに制御が移動を指定します。Specifies that when a run-time error occurs, control goes to the statement immediately following the statement where the error occurred, and execution continues from that point. このフォームを使用してなくOn Error GoToオブジェクトにアクセスするときにします。Use this form rather than On Error GoTo when accessing objects.

コメントRemarks

注意

非構造化例外処理を使用するのではなく、可能な限り、コードに構造化例外処理を使用することをお勧めおよびOn Errorステートメントです。We recommend that you use structured exception handling in your code whenever possible, rather than using unstructured exception handling and the On Error statement. 詳しくは、「Try...Catch...Finally ステートメント」をご覧ください。For more information, see Try...Catch...Finally Statement.

"Enabled"のエラー ハンドラーは 1 つで有効になっている、On Errorステートメントです。An "enabled" error handler is one that is turned on by an On Error statement. "アクティブな"エラー ハンドラーは、有効になっているハンドラーのエラーの処理中であります。An "active" error handler is an enabled handler that is in the process of handling an error.

エラー ハンドラーがアクティブな間にエラーが発生したかどうか (エラーの発生間とResumeExit SubExit Function、またはExit Propertyステートメント)、現在のプロシージャのエラー ハンドラーは、エラーを処理できません。If an error occurs while an error handler is active (between the occurrence of the error and a Resume, Exit Sub, Exit Function, or Exit Property statement), the current procedure's error handler cannot handle the error. コントロールは、呼び出し元のプロシージャを返します。Control returns to the calling procedure.

呼び出し元のプロシージャに、有効なエラー ハンドラーがある場合、エラー処理でアクティブ化されます。If the calling procedure has an enabled error handler, it is activated to handle the error. 呼び出し元のプロシージャのエラー ハンドラーもアクティブである場合、有効であっても、非アクティブなエラー ハンドラーが見つかるまでに元の呼び出しプロシージャを介して返さ制御が渡されます。If the calling procedure's error handler is also active, control passes back through previous calling procedures until an enabled, but inactive, error handler is found. このようなエラー ハンドラーが見つからない場合は、エラーが、実際に発生した時点で致命的です。If no such error handler is found, the error is fatal at the point at which it actually occurred.

エラー ハンドラーは、呼び出し元のプロシージャにコントロールを通過するたびにそのプロシージャには、現在のプロシージャになります。Each time the error handler passes control back to a calling procedure, that procedure becomes the current procedure. 指定された位置から現在のプロシージャの実行が再開されるエラーは、すべてのプロシージャのエラー ハンドラーによって処理されたが後、Resumeステートメントです。Once an error is handled by an error handler in any procedure, execution resumes in the current procedure at the point designated by the Resume statement.

注意

エラー処理ルーチンは、SubプロシージャまたはFunctionプロシージャです。An error-handling routine is not a Sub procedure or a Function procedure. これは、行ラベルまたは行番号でマークされたコードのセクションです。It is a section of code marked by a line label or a line number.

Number プロパティNumber Property

エラー処理ルーチンがの値を使用して、Numberのプロパティ、Errエラーの原因を特定するオブジェクト。Error-handling routines rely on the value in the Number property of the Err object to determine the cause of the error. ルーチンのテストまたはに関連するプロパティ値を保存する必要があります、Err他のエラーが発生する可能性がまたは、エラーが呼び出される可能性がある手順の前に、事前にします。The routine should test or save relevant property values in the Err object before any other error can occur or before a procedure that might cause an error is called. プロパティの値をErrオブジェクトは、最新のエラーのみを反映します。The property values in the Err object reflect only the most recent error. エラー メッセージに関連付けられているErr.Numberに含まれるErr.Descriptionです。The error message associated with Err.Number is contained in Err.Description.

Throw ステートメントThrow Statement

発生したエラー、Err.Raiseメソッドのセット、Exceptionプロパティの新しく作成されたインスタンスをExceptionクラスです。An error that is raised with the Err.Raise method sets the Exception property to a newly created instance of the Exception class. 派生した例外の種類の例外の発生をサポートするために、Throwステートメントは、言語でサポートされています。In order to support the raising of exceptions of derived exception types, a Throw statement is supported in the language. これは、スローされる例外のインスタンスである単一パラメーターを受け取ります。This takes a single parameter that is the exception instance to be thrown. 次の例では、既存の例外処理のサポートでこれらの機能を使用する方法を示しています。The following example shows how these features can be used with the existing exception handling support:

    On Error GoTo Handler
    Throw New DivideByZeroException()
Handler:
    If (TypeOf Err.GetException() Is DivideByZeroException) Then
    ' Code for handling the error is entered here.
    End If

注意して、On Error GoToステートメントは、例外クラスに関係なく、すべてのエラーをトラップします。Notice that the On Error GoTo statement traps all errors, regardless of the exception class.

On Error Resume NextOn Error Resume Next

On Error Resume Next 実行をすぐに実行時エラーの原因となったステートメントを次のステートメントから続行するか、最新直後のステートメントを含むプロシージャの外に呼び出し、On Error Resume Nextステートメントです。On Error Resume Next causes execution to continue with the statement immediately following the statement that caused the run-time error, or with the statement immediately following the most recent call out of the procedure containing the On Error Resume Next statement. このステートメントは、実行時エラーに関係なく、引き続き実行できます。This statement allows execution to continue despite a run-time error. プロシージャ内の別の場所に制御を転送するのではなく、エラーが発生すると、エラー処理ルーチンを配置することができます。You can place the error-handling routine where the error would occur rather than transferring control to another location within the procedure. On Error Resume Nextステートメントになり、非アクティブな別のプロシージャが呼び出されたときに実行する必要があります、On Error Resume Nextインライン内でエラー処理ルーチンをする場合、各ステートメントがルーチンを呼び出すとします。An On Error Resume Next statement becomes inactive when another procedure is called, so you should execute an On Error Resume Next statement in each called routine if you want inline error handling within that routine.

注意

On Error Resume Nextコンストラクトことをお勧めするOn Error GoTo他のオブジェクトへのアクセス中にエラーを処理するときにします。The On Error Resume Next construct may be preferable to On Error GoTo when handling errors generated during access to other objects. チェックErrオブジェクトと対話をコードによってアクセスされたオブジェクトがあいまいさを削除した後です。Checking Err after each interaction with an object removes ambiguity about which object was accessed by the code. 確認するオブジェクトのエラー コードを配置するErr.Number、どのオブジェクトが最初に、エラーを生成および (で指定されたオブジェクトErr.Source)。You can be sure which object placed the error code in Err.Number, as well as which object originally generated the error (the object specified in Err.Source).

On Error GoTo 0On Error GoTo 0

On Error GoTo 0 現在のプロシージャでのエラー処理を無効にします。On Error GoTo 0 disables error handling in the current procedure. 0 行目の手順には、番号 0 の行が含まれている場合でも、エラー処理コードの先頭として指定しません。It doesn't specify line 0 as the start of the error-handling code, even if the procedure contains a line numbered 0. なし、On Error GoTo 0プロシージャが終了したときに、ステートメントでは、エラー ハンドラーが自動的に無効にします。Without an On Error GoTo 0 statement, an error handler is automatically disabled when a procedure is exited.

On Error GoTo-1On Error GoTo -1

On Error GoTo -1 現在のプロシージャに、例外を無効にします。On Error GoTo -1 disables the exception in the current procedure. 指定しません行-1、エラー処理コードの先頭としてプロシージャには、-1 を番号の行が含まれている場合でもです。It does not specify line -1 as the start of the error-handling code, even if the procedure contains a line numbered -1. なし、On Error GoTo -1プロシージャが終了したときに、ステートメントでは、例外が自動的に無効にします。Without an On Error GoTo -1 statement, an exception is automatically disabled when a procedure is exited.

エラー処理コードのエラーが発生していないときに実行を回避するのには、配置、 Exit SubExit Function、またはExit Property直前に次のフラグメントのように、エラー処理ルーチン ステートメント。To prevent error-handling code from running when no error has occurred, place an Exit Sub, Exit Function, or Exit Property statement immediately before the error-handling routine, as in the following fragment:

Public Sub InitializeMatrix(ByVal Var1 As Object, ByVal Var2 As Object)
   On Error GoTo ErrorHandler
   ' Insert code that might generate an error here
   Exit Sub
ErrorHandler:
   ' Insert code to handle the error here
   Resume Next
End Sub

ここでは、エラー処理コードに依存、Exit Subステートメント続き、End Subステートメント、プロシージャのフローから分離します。Here, the error-handling code follows the Exit Sub statement and precedes the End Sub statement to separate it from the procedure flow. プロシージャで任意の場所エラー処理コードを配置することができます。You can place error-handling code anywhere in a procedure.

エラーをトラップしません。Untrapped Errors

オブジェクトでトラップされないエラーは、オブジェクトが、実行可能ファイルとして実行されているときに、制御のアプリケーションに返されます。Untrapped errors in objects are returned to the controlling application when the object is running as an executable file. 開発環境内でエラーをトラップしないが、適切なオプションが設定されている場合にのみ、制御側のアプリケーションに返されます。Within the development environment, untrapped errors are returned to the controlling application only if the proper options are set. 詳細についてはデバッグ中に設定、これらを設定する方法、およびホストがクラスを作成するかどうかをオプションにする、ホスト アプリケーションのマニュアルを参照してください。See your host application's documentation for a description of which options should be set during debugging, how to set them, and whether the host can create classes.

その他のオブジェクトにアクセスするオブジェクトを作成する場合戻す未処理のエラーを処理しようとする必要があります。If you create an object that accesses other objects, you should try to handle any unhandled errors they pass back. 場合はエラー コードをマップすることはできません、Err.Number独自のエラーとし、パスのいずれかには、オブジェクトの呼び出し元に戻します。If you cannot, map the error codes in Err.Number to one of your own errors and then pass them back to the caller of your object. エラー コードを追加して、エラーを指定する必要があります、VbObjectError定数。You should specify your error by adding your error code to the VbObjectError constant. たとえば、独自のエラー コードが 1052 の場合は、それに割り当てます。For example, if your error code is 1052, assign it as follows:

Err.Number = vbObjectError + 1052

注意事項

Windows ダイナミック リンク ライブラリ (Dll) への呼び出し中にシステム エラーは、例外を発生させません、Visual Basic エラー トラップをトラップすることはできません。System errors during calls to Windows dynamic-link libraries (DLLs) do not raise exceptions and cannot be trapped with Visual Basic error trapping. DLL 関数を呼び出すときにの成功または失敗 (、API 仕様に従って)、それぞれの戻り値をチェックする必要があります、障害発生時値を確認し、ErrオブジェクトのLastDLLErrorプロパティです。When calling DLL functions, you should check each return value for success or failure (according to the API specifications), and in the event of a failure, check the value in the Err object's LastDLLError property.

Example

この例を使用して、On Error GoToステートメント、プロシージャ内のエラー処理ルーチンの場所を指定します。This example first uses the On Error GoTo statement to specify the location of an error-handling routine within a procedure. 例では、0 で除算しようとするはエラー番号 6 を生成します。In the example, an attempt to divide by zero generates error number 6. エラー処理ルーチンで、エラーが処理され、エラーが発生したステートメントに制御が返されます。The error is handled in the error-handling routine, and control is then returned to the statement that caused the error. On Error GoTo 0ステートメントがエラー トラップをオフにします。The On Error GoTo 0 statement turns off error trapping. 続いて、On Error Resume Nextエラー トラップできるように、次のステートメントによって生成されたエラーのコンテキストを特定の認識することができますを延期するステートメントを使用します。Then the On Error Resume Next statement is used to defer error trapping so that the context for the error generated by the next statement can be known for certain. なおErr.Clearをクリアするために使用、Errエラーが処理された後、オブジェクトのプロパティです。Note that Err.Clear is used to clear the Err object's properties after the error is handled.

Public Sub OnErrorDemo()
   On Error GoTo ErrorHandler   ' Enable error-handling routine.
   Dim x As Integer = 32
   Dim y As Integer = 0
   Dim z As Integer
   z = x / y   ' Creates a divide by zero error
   On Error GoTo 0   ' Turn off error trapping.
   On Error Resume Next   ' Defer error trapping.
   z = x / y   ' Creates a divide by zero error again
   If Err.Number = 6 Then
      ' Tell user what happened. Then clear the Err object.
      Dim Msg As String
      Msg = "There was an error attempting to divide by zero!"
      MsgBox(Msg, , "Divide by zero error")
      Err.Clear() ' Clear Err object fields.
   End If
Exit Sub      ' Exit to avoid handler.
ErrorHandler:  ' Error-handling routine.
   Select Case Err.Number   ' Evaluate error number.
      Case 6   ' Divide by zero error
         MsgBox("You attempted to divide by zero!")
         ' Insert code to handle this error
      Case Else
         ' Insert code to handle other situations here...
   End Select
   Resume Next  ' Resume execution at the statement immediately 
                ' following the statement where the error occurred.
End Sub

要件Requirements

Namespace: Microsoft.VisualBasicNamespace: Microsoft.VisualBasic

アセンブリ: Visual Basic Runtime Library (Microsoft.VisualBasic.dll)Assembly: Visual Basic Runtime Library (in Microsoft.VisualBasic.dll)

関連項目See Also

Err
Number
Description
LastDllError
End ステートメントEnd Statement
Exit ステートメントExit Statement
Resume ステートメントResume Statement
エラー メッセージError Messages
Try...Catch...Finally ステートメントTry...Catch...Finally Statement