On Error-AnweisungOn Error statement

Aktiviert eine Fehlerbehandlungsroutine und gibt die Position der Routine innerhalb einer Prozedur an. Kann auch zum Deaktivieren einer Fehlerbehandlungsroutine verwendet werden.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.

SyntaxSyntax

On Error GoTo lineOn Error GoTo line
On Error Resume NextOn Error Resume Next
**On Error GoTo 0** **On Error GoTo 0**


Die Syntax der On Error-Anweisung kann die folgenden Formen aufweisen:The On Error statement syntax can have any of the following forms:

AnweisungStatement BeschreibungDescription
On Error GoTo lineOn Error GoTo line Aktiviert die Fehlerbehandlungsroutine, die bei line beginnt (angegeben im erforderlichen line-Argument).Enables the error-handling routine that starts at line specified in the required line argument.

Das line-Argument ist eine beliebige Zeilenbezeichnung oder Zeilennummer.The line argument is any line label or line number.

Wenn ein Laufzeitfehler auftritt, kontrollieren Sie Verzweigungen zu line, wodurch der Fehlerhandler aktiv wird.If a run-time error occurs, control branches to line, making the error handler active.

Das angegebene line-Argument muss in derselben Prozedur wie die On Error-Anweisung vorhanden sein; andernfalls tritt ein compile-time-Fehler auf.The specified line must be in the same procedure as the On Error statement; otherwise, a compile-time error occurs.
On Error Resume NextOn Error Resume Next Legt fest, dass bei Auftreten eines Laufzeitfehlers die Steuerung zu der Anweisung geleitet wird, die unmittelbar auf die Anweisung folgt, bei der der Fehler aufgetreten ist und die Ausführung 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. Verwenden Sie dies statt On Error GoTo beim Zugriff auf Objekte.Use this form rather than On Error GoTo when accessing objects.
On Error GoTo 0On Error GoTo 0 Deaktiviert jeden aktivierten Fehlerhandler in der aktuellen Prozedur.Disables any enabled error handler in the current procedure.

HinweiseRemarks

Wenn Sie keine On Error-Anweisung verwenden, ist jeder Laufzeitfehler, der auftritt, schwerwiegend. D. h., es wird eine Fehlermeldung angezeigt, und die Ausführung wird beendet.If you don't use an On Error statement, any run-time error that occurs is fatal; that is, an error message is displayed and execution stops.

Ein „aktivierter“ Fehlerhandler ist ein durch eine On Error-Anweisung aktivierter Handler; ein „aktiver“ Fehlerhandler ist ein aktivierter Handler, der gerade einen Fehler behebt.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. Wenn ein Fehler auftritt, während ein Fehlerhandler aktiv ist (zwischen dem Auftreten des Fehlers und einer Resume-, Exit Sub-, Exit Function- oder Exit Property-Anweisung), kann der Fehlerhandler der aktuellen Prozedur den Fehler nicht behandeln.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 can't handle the error. Die Steuerung wird an die aufrufende Prozedur zurückgegeben.Control returns to the calling procedure.

Wenn die aufrufende Prozedur einen aktivierten Fehlerhandler hat, wird er zur Fehlerbehandlung aktiviert.If the calling procedure has an enabled error handler, it is activated to handle the error. Wenn der Fehlerhandler der aufrufenden Prozedur auch aktiv ist, wird die Steuerung an die vorherigen aufrufenden Prozeduren zurückgegeben, bis ein aktivierter, aber 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 inaktiver, aktivierter Fehlerhandler gefunden wird, ist der Fehler an der Stelle schwerwiegend, an dem er tatsächlich aufgetreten ist.If no inactive, enabled error handler is found, the error is fatal at the point at which it actually occurred.

Jedes Mal, wenn der Fehlerhandler die Steuerung wieder an die aufrufende Prozedur zurückgibt, wird diese Prozedur zur aktuellen Prozedur.Each time the error handler passes control back to a calling procedure, that procedure becomes the current procedure. Sobald ein Fehler durch einen Fehlerhandler in einer beliebigen Prozedur behandelt wurde, wird die Ausführung in der aktuellen Prozedur an der Stelle wiederaufgenommen, die von der Resume-Anweisung festgelegt wurde.After 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 Fehlerbehandlungsroutine ist keine Sub- oder Function-Prozedur.An error-handling routine is not a Sub procedure or Function procedure. Es handelt sich um einen Codeabschnitt, der durch eine Zeilenbezeichnung oder eine Zeilennummer gekennzeichnet ist.It is a section of code marked by a line label or line number.

Fehlerbehandlungsroutinen nutzen den Wert in der Number-Eigenschaft des Err-Objekts, um die Ursache des Fehlers zu ermitteln.Error-handling routines rely on the value in the Number property of the Err object to determine the cause of the error. Die Fehlerbehandlungsroutine sollte die relevanten Eigenschaftswerte im Err -Objekt testen oder speichern, bevor ein anderer Fehler auftreten kann, oder bevor eine Prozedur aufgerufen wird, die einen Fehler verursachen kann.The error-handling 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 neuesten Fehler wieder.The property values in the Err object reflect only the most recent error. Die mit dem Err.Number -Objekt verknüpfte Fehlermeldung ist im Err.Description -Objekt enthalten.The error message associated with Err.Number is contained in Err.Description.

On Error Resume Next sorgt dafür, dass die Ausführung mit der Anweisung fortgesetzt wird, die direkt nach der Anweisung folgt, die den Laufzeitfehler verursacht hat, oder mit der Anweisung, die direkt nach dem aktuellen Aufruf der Prozedur mit der On Error Resume Next-Anweisung folgt.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. Diese Anweisung lässt die Fortsetzung der Ausführung trotz Laufzeitfehler zu.This statement allows execution to continue despite a run-time error. Sie können die Fehlerbehandlungsroutine dort platzieren, wo der Fehler auftreten würde, statt die Steuerung an eine andere Position 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. Eine On Error Resume Next-Anweisung wird inaktiv, wenn eine andere Prozedur aufgerufen wird. Sie sollten daher eine On Error Resume Next-Anweisung in jeder aufgerufenen Routine ausführen, wenn Sie eine Inline-Fehlerbehandlung für diese Routine wünschen.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

[!HINWEIS] Das On Error Resume Next -Konstrukt ist möglicherweise On Error GoTo bei der Behandlung von Fehlern vorzuziehen, die während des Zugriffs auf andere Objekte generiert wurden.The On Error Resume Next construct may be preferable to On Error GoTo when handling errors generated during access to other objects. Durch Überprüfung von Err nach jeder Interaktion mit einem Objekt werden hinsichtlich der Frage, auf welches Objekt über den Code zugegriffen wurde, Mehrdeutigkeiten vermieden.Checking Err after each interaction with an object removes ambiguity about which object was accessed by the code. Sie können sicher sein, welches Objekt den Fehlercode in Err.Number platziert und welches Objekt den Fehler ursprünglich generiert hat (das in Err.Source angegebene 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).

On Error GoTo 0 deaktiviert die Fehlerbehandlung in der aktuellen Prozedur.On Error GoTo 0 disables error handling in the current procedure. Die Anweisung gibt die Zeile 0 nicht als Start des Fehlerbehandlungscodes an, auch wenn die Prozedur eine Zeile mit der Nummer 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.

Um zu verhindern, dass Fehlerbehandlungscode ausgeführt wird, wenn kein Fehler aufgetreten ist, platzieren Sie eine Exit Sub-, Exit Function- oder Exit Property-Anweisung unmittelbar vor der Fehlerbehandlungsroutine wie in dem 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:

Sub InitializeMatrix(Var1, Var2, Var3, Var4) 
 On Error GoTo ErrorHandler 
 . . . 
 Exit Sub 
ErrorHandler: 
 . . . 
 Resume Next 
End Sub

Hier folgt der Fehlerbehandlungscode der Exit Sub -Anweisung und ist der End Sub-Anweisung vorangestellt, um ihn vom Prozedurfluss 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. Der Fehlerbehandlungscode kann an einer beliebigen Stelle in einer Prozedur eingefügt werden.Error-handling code can be placed anywhere in a procedure.

Nicht abgefangene 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 abgefangene Fehler nur dann an die steuernde Anwendung zurückgegeben, wenn die richtigen Optionen festgelegt sind.Within the development environment, untrapped errors are only returned to the controlling application if the proper options are set. In der Dokumentation Ihrer Hostanwendung finden Sie eine Beschreibung, welche Optionen während des Debugging festlegt werden sollten, wie Sie sie festlegen und ob der Host Klassen erstellen kann.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, Fehler zu behandeln, die von diesen nicht behandelt zurückgegeben werden.If you create an object that accesses other objects, you should try to handle errors passed back from them unhandled. Wenn solche Fehler nicht behoben werden können, ordnen Sie den Fehlercode im Err.Number -Objekt einem Ihrer eigenen Fehler zu, und senden Sie sie dann zurück an den Aufrufer des Objekts.If you cannot handle such errors, map the error code in Err.Number to one of your own errors, and then pass them back to the caller of your object. Sie sollten Ihren 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 beispielsweise 1052 ist, weisen Sie ihn wie folgt zu:For example, if your error code is 1052, assign it as follows:

Err.Number = vbObjectError + 1052 

Hinweis

Systemfehler, die beim Aufrufen von Dynamic Link Libraries (DLLs) von Windows oder von Macintosh-Coderessourcen auftreten, lösen keine Ausnahme aus und können nicht mit der Visual Basic-Fehlerbehebung abgefangen werden.System errors during calls to Windows dynamic-link libraries (DLL) or Macintosh code resources do not raise exceptions and cannot be trapped with Visual Basic error trapping. Beim Aufrufen von DLL-Funktionen sollten Sie jeden Rückgabewert hinsichtlich Erfolg oder Fehler (gemäß den API-Spezifikationen) überprüfen, und bei einem Fehler den Wert in der LastDLLError-Eigenschaft des Err-Objekts überprüfen.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. LastDLLError gibt auf Macintosh immer Null zurück.LastDLLError always returns zero on the Macintosh.

BeispielExample

In diesem Beispiel wird zuerst die On Error GoTo -Anweisung verwendet, um die Position einer Fehlerbehandlungsroutine 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. In dem Beispiel wird durch den Versuch, eine geöffnete Datei zu löschen, der Fehler 55 generiert.In the example, an attempt to delete an open file generates error number 55. Der Fehler wird in der Fehlerbehandlungsroutine 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. Die On Error GoTo 0-Anweisung deaktiviert die Fehlerbehebung.The On Error GoTo 0 statement turns off error trapping.

Die On Error Resume Next-Anweisung wird dann verwendet, um die Fehlerbehebung zu verzögern, sodass der Kontext für den durch die nächste Anweisung generierten Fehler mit Gewissheit bekannt sein kann.The On Error Resume Next statement is then used to defer error trapping so that the context for the error generated by the next statement can be known for certain. Beachten Sie, dass das Err.Clear-Objekt verwendet wird, um die Eigenschaften des Err-Objekts zu löschen, nachdem der Fehler behoben wurde.Note that Err.Clear is used to clear the Err object's properties after the error is handled.

Sub OnErrorStatementDemo() 
 On Error GoTo ErrorHandler ' Enable error-handling routine. 
 Open "TESTFILE" For Output As #1 ' Open file for output. 
 Kill "TESTFILE" ' Attempt to delete open 
 ' file. 
 On Error Goto 0 ' Turn off error trapping. 
 On Error Resume Next ' Defer error trapping. 
 ObjectRef = GetObject("MyWord.Basic") ' Try to start nonexistent 
 ' object, then test for 
'Check for likely Automation errors. 
 If Err.Number = 440 Or Err.Number = 432 Then 
 ' Tell user what happened. Then clear the Err object. 
 Msg = "There was an error attempting to open the Automation object!" 
 MsgBox Msg, , "Deferred Error Test" 
 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 55 ' "File already open" error. 
 Close #1 ' Close open file. 
 Case Else 
 ' Handle other situations here... 
 End Select 
 Resume ' Resume execution at same line 
 ' that caused the error. 
End Sub

Siehe auchSee also

Support und FeedbackSupport and feedback

Haben Sie Fragen oder Feedback zu Office VBA oder zu dieser Dokumentation?Have questions or feedback about Office VBA or this documentation? Unter Office VBA-Support und Feedback finden Sie Hilfestellung zu den Möglichkeiten, wie Sie Support erhalten und Feedback abgeben können.Please see Office VBA support and feedback for guidance about the ways you can receive support and provide feedback.