On Error-Anweisung (Visual Basic)On Error Statement (Visual Basic)

Aktiviert eine Fehler Behandlungs Routine und gibt den Speicherort der Routine innerhalb einer Prozedur an. kann auch verwendet werden, um eine Fehler Behandlungs Routine zu deaktivieren.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. Die On Error -Anweisung wird bei der unstrukturierten Fehlerbehandlung verwendet und kann anstelle der strukturierten Ausnahmebehandlung verwendet werden.The On Error statement is used in unstructured error handling and can be used instead of structured exception handling. Die strukturierte Ausnahmebehandlung ist in .NET integriert, ist im Allgemeinen effizienter und wird daher empfohlen, wenn Laufzeitfehler in der Anwendung behandelt werden.Structured exception handling is built into .NET, is generally more efficient, and so is recommended when handling runtime errors in your application.

Ohne Fehlerbehandlung oder Ausnahmebehandlung ist jeder auftretende Laufzeitfehler schwerwiegend: eine Fehlermeldung wird angezeigt, und die Ausführung wird beendet.Without error handling or exception handling, any run-time error that occurs is fatal: an error message is displayed, and execution stops.

Hinweis

Das Error -Schlüsselwort wird auch in der Error-Anweisungverwendet, die aus Gründen der Abwärtskompatibilität unterstützt wird.The Error keyword is also used in the Error Statement, which is supported for backward compatibility.

SyntaxSyntax

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

TeileParts

BegriffTerm DefinitionDefinition
GoToZeileGoTo line Aktiviert die Fehler Behandlungs Routine, die an der im erforderlichen Zeilen Argument angegebenen Zeile beginnt.Enables the error-handling routine that starts at the line specified in the required line argument. Das Zeilen Argument ist eine beliebige Zeilen Bezeichnung oder Zeilennummer.The line argument is any line label or line number. Wenn ein Laufzeitfehler auftritt, Steuern Sie Verzweigungen in die angegebene Zeile, sodass der Fehlerhandler aktiv wird.If a run-time error occurs, control branches to the specified line, making the error handler active. Die angegebene Zeile muss sich in derselben Prozedur wie die On Error -Anweisung befinden, oder es tritt ein Kompilierzeitfehler auf.The specified line must be in the same procedure as the On Error statement or a compile-time error will occur.
GoTo 0 Deaktiviert den aktivierten Fehlerhandler in der aktuellen Prozedur und setzt ihn auf Nothingzurück.Disables enabled error handler in the current procedure and resets it to Nothing.
GoTo -1 Deaktiviert die aktivierte Ausnahme in der aktuellen Prozedur und setzt Sie auf Nothingzurück.Disables enabled exception in the current procedure and resets it to Nothing.
Resume Next Gibt an, dass die Steuerung bei Auftreten eines Lauf zeitfehlers direkt nach der Anweisung, in der der Fehler aufgetreten ist, an die Anweisung weitergeleitet wird und die Ausführung von diesem Punkt aus fortgesetzt wird.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. Verwenden Sie dieses Formular anstelle On Error GoTo des Zugriffs auf Objekte.Use this form rather than On Error GoTo when accessing objects.

HinweiseRemarks

Hinweis

Es empfiehlt sich, nach Möglichkeit eine strukturierte Ausnahmebehandlung in Ihrem Code zu verwenden, anstatt eine unstrukturierte Ausnahmebehandlung und On Error die-Anweisung zu verwenden.We recommend that you use structured exception handling in your code whenever possible, rather than using unstructured exception handling and the On Error statement. Weitere Informationen finden Sie unter Try...Catch...Finally-Anweisung.For more information, see Try...Catch...Finally Statement.

Ein "aktivierter" Fehlerhandler ist ein Fehlerhandler, der von On Error einer-Anweisung aktiviert wird.An "enabled" error handler is one that is turned on by an On Error statement. Ein "aktiver" Fehlerhandler ist ein aktivierter Handler, der gerade einen Fehler behandelt.An "active" error handler is an enabled handler that is in the process of handling an error.

Wenn ein Fehler auftritt, während ein Fehlerhandler aktiv ist (zwischen dem Auftreten des Fehlers und einer Resume- Exit Sub Exit Function,-, Exit Property -oder-Anweisung), kann der Fehlerhandler der aktuellen Prozedur den Fehler nicht verarbeiten.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. Die Steuerung wird an die aufrufenden Prozedur zurückgegeben.Control returns to the calling procedure.

Wenn die aufrufende Prozedur einen aktivierten Fehlerhandler aufweist, wird Sie zur Behandlung des Fehlers aktiviert.If the calling procedure has an enabled error handler, it is activated to handle the error. Wenn der Fehlerhandler der aufrufenden Prozedur ebenfalls aktiv ist, wird die Steuerung durch vorherige Aufruf Prozeduren zurückgeleitet, bis ein aktivierter, jedoch inaktiver Fehlerhandler gefunden wird.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. Wenn kein solcher Fehlerhandler gefunden wird, ist der Fehler an dem Punkt, an dem er tatsächlich aufgetreten ist, schwerwiegend.If no such error handler is found, the error is fatal at the point at which it actually occurred.

Jedes Mal, wenn der Fehlerhandler die Steuerung zurück an eine aufrufenden Prozedur übergibt, wird dieses Verfahren zur aktuellen Prozedur.Each time the error handler passes control back to a calling procedure, that procedure becomes the current procedure. Sobald ein Fehlerhandler in einer Prozedur behandelt wird, wird die Ausführung in der aktuellen Prozedur an dem von der Resume -Anweisung festgelegten Punkt fortgesetzt.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.

Hinweis

Eine Fehler Behandlungs Routine ist weder eine Sub Prozedur noch eine Function Prozedur.An error-handling routine is not a Sub procedure or a Function procedure. Es handelt sich um einen Code Abschnitt, der durch eine Zeilen Bezeichnung oder eine Zeilennummer gekennzeichnet ist.It is a section of code marked by a line label or a line number.

Number-EigenschaftNumber Property

Fehlerbehandlungsroutinen basieren auf dem Wert in der Number -Eigenschaft Err des-Objekts, um die Ursache des Fehlers zu bestimmen.Error-handling routines rely on the value in the Number property of the Err object to determine the cause of the error. Die Routine sollte relevante Eigenschaftswerte im Err Objekt testen oder speichern, bevor ein anderer Fehler auftreten kann, oder bevor eine Prozedur aufgerufen wird, die möglicherweise einen Fehler verursacht.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. Die Eigenschaftswerte im Err -Objekt spiegeln nur den letzten Fehler wider.The property values in the Err object reflect only the most recent error. Die Fehlermeldung, die Err.Number zugeordnet ist, Err.Descriptionist in enthalten.The error message associated with Err.Number is contained in Err.Description.

Throw-AnweisungThrow Statement

Ein Fehler, der mit der Err.Raise -Methode ausgelöst wird, legt die Exception -Eigenschaft auf eine Exception neu erstellte Instanz der-Klasse fest.An error that is raised with the Err.Raise method sets the Exception property to a newly created instance of the Exception class. Um das Auftreten von Ausnahmen abgeleiteter Ausnahme Typen zu unterstützen, Throw wird eine-Anweisung in der-Sprache unterstützt.In order to support the raising of exceptions of derived exception types, a Throw statement is supported in the language. Dabei wird ein einzelner Parameter benötigt, bei dem es sich um die Ausnahme Instanz handelt.This takes a single parameter that is the exception instance to be thrown. Im folgenden Beispiel wird gezeigt, wie diese Funktionen mit der vorhandenen Unterstützung für die Ausnahmebehandlung verwendet werden können: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

Beachten Sie, On Error GoTo dass die-Anweisung unabhängig von der Exception-Klasse alle Fehler abgefangen hat.Notice that the On Error GoTo statement traps all errors, regardless of the exception class.

Bei Fehler fortsetzen als nächstesOn Error Resume Next

On Error Resume Nextbewirkt, dass die Ausführung mit der Anweisung unmittelbar nach der-Anweisung fortgesetzt wird, die den Laufzeitfehler verursacht hat, oder mit der-Anweisung, die unmittelbar nach dem On Error Resume Next letzten Aufruf der Prozedur, die die Anweisung enthält, ausgeführt wird.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. Mit dieser Anweisung kann die Ausführung trotz eines Lauf zeitfehlers fortgesetzt werden.This statement allows execution to continue despite a run-time error. Sie können die Fehler Behandlungs Routine platzieren, in der der Fehler auftritt, anstatt die Steuerung an einen anderen Speicherort innerhalb der Prozedur zu übertragen.You can place the error-handling routine where the error would occur rather than transferring control to another location within the procedure. Wenn On Error Resume Next eine-Anweisung aufgerufen wird, wenn eine andere Prozedur aufgerufen wird, sollten On Error Resume Next Sie in jeder aufgerufenen Routine eine-Anweisung ausführen, wenn Sie eine Inline Fehlerbehandlung innerhalb dieser Routine ausführen möchten.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.

Hinweis

Das On Error Resume Next -Konstrukt kann bei der On Error GoTo Behandlung von Fehlern, die während des Zugriffs auf andere Objekte generiert werden, vorzuziehen sein.The On Error Resume Next construct may be preferable to On Error GoTo when handling errors generated during access to other objects. Durch Err das überprüfen nach jeder Interaktion mit einem Objekt werden Mehrdeutigkeiten darüber entfernt, auf welches Objekt der Code zugegriffen hat.Checking Err after each interaction with an object removes ambiguity about which object was accessed by the code. Sie können sicherstellen, welches Objekt den Fehlercode in Err.Numbereingefügt hat, und welches Objekt den Fehler ursprünglich generiert hat (das in Err.Sourceangegebene Objekt).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).

Bei Fehler "GoTo 0"On Error GoTo 0

On Error GoTo 0deaktiviert die Fehlerbehandlung in der aktuellen Prozedur.On Error GoTo 0 disables error handling in the current procedure. Die Zeile 0 wird nicht als Start des Fehler Behandlungs Codes angegeben, auch wenn die Prozedur eine Zeile mit der nummerierten 0 enthält.It doesn't specify line 0 as the start of the error-handling code, even if the procedure contains a line numbered 0. Ohne eine On Error GoTo 0 -Anweisung wird ein Fehlerhandler automatisch deaktiviert, wenn eine Prozedur beendet wird.Without an On Error GoTo 0 statement, an error handler is automatically disabled when a procedure is exited.

Bei Fehler "GoTo-1"On Error GoTo -1

On Error GoTo -1deaktiviert die Ausnahme in der aktuellen Prozedur.On Error GoTo -1 disables the exception in the current procedure. Die Zeile-1 wird nicht als Start des Fehler Behandlungs Codes angegeben, auch wenn die Prozedur eine Zeile mit der nummerierten-1 enthält.It does not specify line -1 as the start of the error-handling code, even if the procedure contains a line numbered -1. Ohne eine On Error GoTo -1 -Anweisung wird eine Ausnahme automatisch deaktiviert, wenn eine Prozedur beendet wird.Without an On Error GoTo -1 statement, an exception is automatically disabled when a procedure is exited.

Um zu verhindern, dass der Fehler Behandlungs Code ausgeführt wird, wenn kein Fehler aufgetreten Exit Subist Exit Function, platzieren Exit Property Sie eine-,-oder-Anweisung unmittelbar vor der Fehler Behandlungs Routine, wie im folgenden Fragment: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

Hier befolgt der Fehler Behandlungs Code die Exit Sub -Anweisung und steht vor der End Sub -Anweisung, um Sie vom Ablauf der Prozedur zu trennen.Here, the error-handling code follows the Exit Sub statement and precedes the End Sub statement to separate it from the procedure flow. Sie können den Code für die Fehlerbehandlung an beliebiger Stelle in einer Prozedur platzieren.You can place error-handling code anywhere in a procedure.

Nicht aufgetreppte FehlerUntrapped Errors

Nicht aufgetreppte Fehler in Objekten werden an die steuernde Anwendung zurückgegeben, wenn das Objekt als ausführbare Datei ausgeführt wird.Untrapped errors in objects are returned to the controlling application when the object is running as an executable file. Innerhalb der Entwicklungsumgebung werden nicht aufgetreppte Fehler nur dann an die steuernde Anwendung zurückgegeben, wenn die richtigen Optionen festgelegt sind.Within the development environment, untrapped errors are returned to the controlling application only if the proper options are set. Eine Beschreibung der Optionen, die während des Debuggens festgelegt werden müssen, und der Art und Weise, wie der Host Klassen erstellen kann, finden Sie in der Dokumentation der Host Anwendung.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.

Wenn Sie ein Objekt erstellen, das auf andere Objekte zugreift, sollten Sie versuchen, nicht behandelte Fehler zu behandeln, die zurückgegeben werden.If you create an object that accesses other objects, you should try to handle any unhandled errors they pass back. Wenn dies nicht möglich ist, ordnen Sie die Err.Number Fehlercodes in einem ihrer eigenen Fehler zu, und übergeben Sie Sie dann wieder an den Aufrufer des Objekts.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. Sie sollten den Fehler angeben, indem Sie den Fehlercode der VbObjectError Konstante hinzufügen.You should specify your error by adding your error code to the VbObjectError constant. Wenn der Fehlercode z. b. 1052 lautet, weisen Sie ihn wie folgt zu:For example, if your error code is 1052, assign it as follows:

Err.Number = vbObjectError + 1052

Achtung

System Fehler bei Aufrufen von Windows Dynamic Link Libraries (DLLs) geben keine Ausnahmen aus und können nicht mit Visual Basic fehlerabfang nicht erfasst werden.System errors during calls to Windows dynamic-link libraries (DLLs) do not raise exceptions and cannot be trapped with Visual Basic error trapping. Wenn Sie DLL-Funktionen aufrufen, sollten Sie jeden Rückgabewert auf Erfolg oder Fehler (gemäß den API-Spezifikationen) überprüfen. Überprüfen Sie im Fall eines Fehlers den Wert in Err der- LastDLLError Eigenschaft des-Objekts.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.

BeispielExample

In diesem Beispiel wird zuerst On Error GoTo die-Anweisung verwendet, um den Speicherort einer Fehler Behandlungs Routine innerhalb einer Prozedur anzugeben.This example first uses the On Error GoTo statement to specify the location of an error-handling routine within a procedure. Im Beispiel generiert ein Versuch, eine Division durch 0 (null), die Fehlernummer 6.In the example, an attempt to divide by zero generates error number 6. Der Fehler wird in der Fehler Behandlungs Routine behandelt, und die Steuerung wird dann an die Anweisung zurückgegeben, die den Fehler verursacht hat.The error is handled in the error-handling routine, and control is then returned to the statement that caused the error. Mit On Error GoTo 0 der-Anweisung wird die Fehlerbehebung deaktiviert.The On Error GoTo 0 statement turns off error trapping. Anschließend wird On Error Resume Next die-Anweisung verwendet, um das Abfangen von Fehlern zu verzögern, sodass der Kontext für den Fehler, der von der nächsten Anweisung generiert wird, auf bestimmte Weise bekannt ist.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. Beachten Sie Err.Clear , dass verwendet wird, Err um die Eigenschaften des Objekts zu löschen, nachdem der Fehler behandelt wurde.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

AnforderungenRequirements

Namespace: Microsoft.VisualBasicNamespace: Microsoft.VisualBasic

Stadtverordneten Visual Basic Runtime Library (in Microsoft.VisualBasic.dll)Assembly: Visual Basic Runtime Library (in Microsoft.VisualBasic.dll)

Siehe auchSee also