On Error (Anweisung)

<< Click to Display Table of Contents >>

On Error (Anweisung)

On Error Goto Label

Oder:

On Error Resume Next

Oder:

On Error Goto 0

Aktiviert eine Fehlerbehandlungsroutine zur Behandlung von Laufzeitfehlern:

Bei On Error Goto Label wird im Falle eines Laufzeitfehlers beim angegebenen Sprungziel Label fortgefahren.

Bei On Error Resume Next werden Laufzeitfehler einfach ignoriert. Vorsicht: Hierbei können im Falle eines Laufzeitfehlers unvorhersehbare Ergebnisse geliefert werden.

Bei On Error Goto 0 wird die Fehlerbehandlung deaktiviert – Laufzeitfehler führen dann wieder wie gewohnt zum Programmabbruch mit einer Fehlermeldung.

Eine On Error-Anweisung gilt nur innerhalb der Subroutine oder Funktion, in der sie sich befindet.

Wurde mit On Error Goto zu einem Label verzweigt, kann die Script-Ausführung von dort aus mit der Resume-Anweisung wieder aufgenommen werden. Das Script wird dann in der nächsten Zeile fortgesetzt.

Siehe auch: Resume

Beispiel:

In diesem Beispiel wird absichtlich ein Fehler ausgelöst, um die Fehlerbehandlungsroutine beim Label "Fehler" auszulösen. Darin wird der Anwender gefragt, ob die Ausführung des Scripts fortgesetzt werden soll. Bei "Ja" wird das Script mit Resume Next in der nächsten Zeile nach dem Laufzeitfehler fortgesetzt, bei "Nein" wird die Ausführung mit Stop beendet.

Sub Main

 On Error Goto Fehler

 Print 1/0     ' Fehler (Division durch Null) auslösen

 MsgBox "Ende"

 Exit Sub

Fehler:            ' Fehlerbehandlungsroutine

 Dim DgDef, Msg, Response, Title

 Title = "Fehler"

 Msg = "Es ist ein Laufzeitfehler aufgetreten. Möchten Sie fortfahren?"

 DgDef = MB_YESNO + MB_ICONEXCLAMATION

 Response = MsgBox(Msg, DgDef, Title)

 If Response = IDYES Then

         Resume Next

 Else

         Stop

 End If

End Sub

Zu Testzwecken können Laufzeitfehler mit dem Befehl Err.Raise künstlich ausgelöst werden.

Syntax: Err.Raise Nummer

Für Nummer ist die Fehlernummer anzugeben:

3: "RETURN ohne GOSUB"

5: "Ungültiger Funktionsaufruf"

6: "Überlauf"

7: "Speicher voll"

9: "Subskript außerhalb des gültigen Bereichs"

10: "Array hat feste Größe oder ist vorübergehend verriegelt"

11: "Division durch Null"

13: "Typen passen nicht zueinander"

14: "Stringspeicher voll"

16: "Ausdruck zu komplex"

17: "Operation kann nicht ausgeführt werden"

18: "Durch Benutzer abgebrochen"

20: "RESUME ohne Fehler"

28: "Stapelspeicher voll"

35: "SUB, FUNCTION oder PROPERTY nicht definiert"

47: "Zu viele DLL-Klienten"

48: "Fehler beim Laden der DLL"

49: "Fehlerhafter DLL-Aufruf"

51: "Interner Fehler"

52: "Ungültiger Dateiname oder ungültige Dateinummer"

53: "Datei nicht gefunden"

54: "Ungültiger Dateimodus"

55: "Diese Datei ist bereits geöffnet"

57: "Fehler bei Ein-/Ausgabe auf Gerät"

58: "Datei existiert bereits"

59: "Fehlerhafte Datensatzlänge"

60: "Datenträger voll"

62: "Versuch, hinter dem Dateiende zu lesen"

63: "Ungültige Satznummer"

67: "Zu viele Dateien geöffnet"

68: "Gerät nicht verfügbar"

70: "Zugriff verweigert"

71: "Datenträger nicht bereit"

74: "Umbenennen über Laufwerke hinweg nicht möglich"

75: "Fehler beim Zugriff auf Pfad oder Datei"

76: "Pfad nicht gefunden"

91: "Objektvariable oder WITH-Block-Variable nicht gesetzt"

92: "FOR-Schleife nicht initialisiert"

93: "Fehlerhafter Musterstring"

94: "Fehlerhafte Benutzung von NULL"

OLE-Automation-Fehler

424: "Objekt benötigt"

429: "Der OLE-Automation-Server kann das Objekt nicht erzeugen"

430: "Klasse unterstützt keine OLE-Automation"

432: "Datei- oder Klassenname während OLE-Automation-Operation nicht gefunden"

438: "Das Objekt unterstützt diese Eigenschaft oder Methode nicht"

440: "OLE-Automation-Fehler"

443: "Das OLE-Automation-Objekt hat keinen voreingestellten Wert"

445: "Das Objekt unterstützt diese Aktion nicht"

446: "Das Objekt unterstützt keine benannten Parameter"

447: "Das Objekt unterstützt die aktuelle lokale Einstellung nicht"

448: "Benannten Parameter nicht gefunden"

449: "Parameter nicht optional"

450: "Zahl der Parameter ist falsch"

451: "Das Objekt ist keine Collection"

Diverse Fehler

444: "Methode ist in diesem Kontext nicht anwendbar"

452: "Ungültiger Ordinalwert"

453: "Funktion nicht gefunden"

480: "ByRef-Parameter hat falschen Typ"