On Error-Anweisung

       

Aktiviert eine Fehlerbehandlungsroutine und gibt deren Position innerhalb einer Prozedur an. Die Anweisung kann auch zum Deaktivieren einer Fehlerbehandlungsroutine verwendet werden.

Syntax

On Error GoTo Zeile

On Error Resume Next

On Error GoTo 0

Sie k÷nnen die On Error-Anweisung mit folgender Syntax verwenden:

Anweisung Beschreibung
On Error GoTo Zeile Aktiviert die Fehlerbehandlungsroutine, die in der Zeile beginnt, welche im erforderlichen Argument Zeile festgelegt wurde. Das Argument Zeile ist eine beliebige Zeilenmarke oder Zeilennummer. Tritt danach ein Laufzeitfehler auf, so verzweigt die Programmsteuerung zu Zeile und aktiviert so die Fehlerbehandlungsroutine. Die angegebene Zeile mu▀ sich in derselben Prozedur wie die On Error-Anweisung befinden, andernfalls tritt ein Fehler zur Kompilierungszeit auf.
On Error Resume Next Legt fest, da▀ das Programm die Ausfⁿhrung beim Auftreten eines Laufzeitfehlers mit der Anweisung fortsetzt, die auf die fehlerverursachende Anweisung folgt. Sie sollten diese Form anstelle von On Error GoTo verwenden, wenn Sie auf Objekte zugreifen.
On Error GoTo 0 Deaktiviert alle aktivierten Fehlerbehandlungsroutinen in der aktuellen Prozedur.

Bemerkungen

Wenn Sie keine On Error-Anweisung verwenden, fⁿhrt jeder Laufzeitfehler zur Anzeige einer Fehlermeldung und zum Beenden des Programms.

Eine "aktivierte" Fehlerbehandlungsroutine ist eine Routine, die durch eine On Error-Anweisung "eingeschaltet" wurde. Eine "aktive" Fehlerbehandlungsroutine ist eine aktivierte Behandlungsroutine, die momentan einen Fehler verarbeitet. Wenn ein Fehler auftritt, wΣhrend eine Fehlerbehandlungsroutine aktiv ist (also zwischen dem Auftreten des Fehlers und der Ausfⁿhrung einer Resume-, Exit Sub-, Exit Function- oder Exit Property-Anweisung), kann die Fehlerbehandlungsroutine den Fehler nicht bearbeiten. Das Programm wird in der aufrufenden Prozedur fortgesetzt. Falls fⁿr die aufrufende Prozedur eine Fehlerbehandlungsroutine verfⁿgbar ist, wird diese aktiviert, um den Fehler zu verarbeiten. Ist auch diese Fehlerbehandlungsroutine bereits aktiv, so wird die Steuerung so lange an die frⁿheren aufrufenden Prozeduren weitergegeben, bis eine aktivierte Fehlerbehandlungsroutine gefunden wird, die jedoch momentan nicht aktiv ist. Wenn keine aktivierte Fehlerbehandlungsroutine im nichtaktiven Zustand gefunden wird, wird das Programm durch den Fehler an der Stelle beendet, an der der Fehler tatsΣchlich aufgetreten ist. Sobald die Fehlerbehandlungsroutine die Steuerung an die aufrufende Prozedur zurⁿckgibt, wird diese Prozedur zur aktuellen Prozedur. Nachdem ein Fehler von einer Fehlerbehandlungsroutine in einer beliebigen Prozedur verarbeitet wurde, setzt das Programm die Ausfⁿhrung in der aktuellen Prozedur an der Stelle fort, die durch die Resume-Anweisung angegeben ist.

Anmerkung Eine Fehlerbehandlungsroutine ist keine Sub- oder Function-Prozedur, sondern ein durch eine Zeilenmarke oder Zeilennummer gekennzeichneter Code-Bereich.

Fehlerbehandlungsroutinen verwenden den Wert in der Number-Eigenschaft des Err-Objekts, um die Fehlerursache zu bestimmen. Die Fehlerbehandlungsroutine sollte die wichtigen Eigenschaftswerte des Err-Objekts ⁿberprⁿfen oder speichern, bevor ein anderer Fehler auftreten kann oder bevor eine Prozedur, die einen Fehler ausl÷sen kann, aufgerufen wird. Die Werte in den Eigenschaften des Err-Objekts geben nur den zuletzt aufgetretenen Fehler wieder. Die Fehlermeldung fⁿr Err.Number ist in Err.Description enthalten.

Das Programm setzt nach einer On Error Resume Next-Anweisung die Ausfⁿhrung mit der Anweisung fort, die unmittelbar auf die Anweisung folgt, die den Laufzeitfehler verursacht hat, oder mit der Anweisung, die unmittelbar auf den letzten Aufruf einer anderen Prozedur folgt, in der die On Error Resume Next-Anweisung enthalten ist. Dadurch kann das Programm die Ausfⁿhrung trotz eines Laufzeitfehlers fortsetzen, und Sie k÷nnen die Fehlerbehandlungsroutine direkt an der Stelle durchfⁿhren, an der die fehlerverursachende Anweisung auftritt, anstatt an eine andere Stelle innerhalb der Prozedur zu verzweigen. 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 die Fehlerbehandlung direkt in der jeweiligen Routine durchfⁿhren m÷chten.

Anmerkung Die Konstruktion On Error Resume Next ist m÷glicherweise besser geeignet als On Error GoTo, wenn Sie Fehler verarbeiten, die beim Zugriff auf andere Objekte ausgel÷st wurden. Wenn Sie Err nach jeder Interaktion mit einem Objekt ⁿberprⁿfen, wird jederzeit eindeutig festgestellt, auf welches Objekt der Code zugegriffen hat. Sie wissen daher, welches Objekt den Fehler-Code in Err.Number gespeichert hat und welches (in Err.Source angegebene) Objekt den Fehler ursprⁿnglich ausgel÷st hat.

On Error GoTo 0 deaktiviert die Fehlerbehandlung in der aktuellen Prozedur. Dabei wird die Zeile 0 nicht als Startpunkt des Fehlerbehandlungs-Codes interpretiert (auch dann nicht, wenn die Prozedur eine Zeile 0 enthΣlt). Eine Fehlerbehandlungsroutine ohne eine On Error GoTo 0-Anweisung wird beim Verlassen einer Prozedur automatisch deaktiviert.

Damit der Fehlerbehandlungs-Code nicht ausgefⁿhrt wird, wenn kein Fehler aufgetreten ist, k÷nnen Sie eine geeignete Exit Sub-, Exit Function- oder Exit Property-Anweisung unmittelbar vor die Fehlerbehandlungsroutine schreiben, wie im folgenden Beispiel:

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

In diesem Beispiel steht der Fehlerbehandlungs-Code hinter der Exit Sub-Anweisung und vor der End Sub-Anweisung, um ihn vom normalen Programmablauf in der Prozedur zu trennen. Sie k÷nnen Fehlerbehandlungs-Code ansonsten beliebig innerhalb einer Prozedur positionieren.

Nichtaufgefangene Fehler in Objekten werden zur steuernden Anwendung zurⁿckgegeben, wenn das Objekt als ausfⁿhrbare Datei aktiviert ist. Innerhalb der Entwicklungsumgebung werden die nichtaufgefangenen Fehler nur zur steuernden Anwendung zurⁿckgegeben, wenn die entsprechenden Optionen aktiviert sind. Um zu erfahren, welche Optionen wΣhrend der Fehlerbehandlung aktiviert sein sollten, wie sie aktiviert werden und ob die Host-Anwendung Klassen erstellen kann, lesen Sie die Dokumentation Ihrer Host-Anwendung.

Wenn Sie ein Objekt erstellen, das auf andere Objekte zugreift, sollten Sie versuchen, die aus diesen Objekten unbehandelt zurⁿckgegebenen Fehler zu verarbeiten. Wenn Sie derartige Fehler nicht verarbeiten k÷nnen, sollten Sie den Fehler-Code in Err.Number zuerst auf einen Ihrer eigenen Fehler festlegen und dann diese Fehler an die Routine zurⁿckgeben, die Ihr Objekt aufgerufen hat. Sie sollten Ihren Fehler angeben, indem Sie Ihren Fehler-Code zur Konstanten vbObjectError addieren. Wenn Ihr Fehler-Code zum Beispiel den Wert 1052 hat, weisen Sie ihn wie folgt zu:

Err.Number = vbObjectError + 1052

Anmerkung Systemfehler beim Aufrufen von Dynamic Link Libraries (DLLs) oder Macintosh-Code-Ressourcen l÷sen keine Ausnahmen (Exceptions) aus, d.h., sie k÷nnen mit der Fehlerbehandlung von Visual Basic nicht aufgefangen werden. Beim Aufrufen von DLL-Funktionen sollten Sie jeden Rⁿckgabewert daraufhin ⁿberprⁿfen, ob der Aufruf erfolgreich war (entsprechend den API-Spezifikationen). ▄berprⁿfen Sie anderenfalls den Wert der LastDLLError-Eigenschaft des Err-Objekts.LastDLLError gibt auf dem Macintosh immer Null zurⁿck.