jasso Geschrieben 24. Juni 2004 Geschrieben 24. Juni 2004 TachTach ich hab mal wieder eine grundlegende frage über den funktionsumfang von VB6. ist es in selbigem möglich, und wenn ja wie, Exceptions zu werfen und aufzufangen? Zitieren
developer Geschrieben 24. Juni 2004 Geschrieben 24. Juni 2004 Ja, On Error-Anweisung Aktiviert eine Fehlerbehandlungsroutine und gibt deren Position innerhalb einerProzedur 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 erforderlichenArgument Zeile festgelegt wurde. Das Argument Zeile ist eine beliebigeZeilenmarke oderZeilennummer. Tritt danach einLaufzeitfehler 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 zurKompilierungszeit auf. On Error Resume Next Legt fest, daß das Programm die Ausführung beim Auftreten eines Laufzeitfehlers mit derAnweisung 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-AnwendungKlassen erstellen kann, lesen Sie die Dokumentation IhrerHost-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 vonDynamic Link Libraries (DLLs) 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. On Error-Anweisung (Beispiel) In diesem Beispiel wird zuerst die On Error GoTo-Anweisung verwendet, um die Position einer Fehlerbehandlungsroutine in einer Prozedur anzuzeigen. Im Beispiel wird bei dem Versuch, eine geöffnete Datei zu löschen, der Fehler mit der Nummer 55 ausgelöst. Der Fehler wird in der Fehlerbehandlungsroutine bearbeitet, und die Ausführung wird anschließend mit der Anweisung fortgesetzt, die den Fehler verursacht hat. Die On Error GoTo 0-Anweisung deaktiviert die Fehlerbehandlung. Dann wird die On Error Resume Next-Anweisung verwendet, um die Fehlerbehandlung zurückzustellen, damit der Kontext für den von der nächsten Anweisung ausgelösten Fehler mit Sicherheit bestimmt werden kann. Err.Clear wird verwendet, um die Eigenschaften des Err-Objekts zurückzusetzen, nachdem der Fehler bearbeitet wurde. Sub OnErrorAnweisungDemo() On Error GoTo ErrorHandler ' Fehlerbehandlung aktivieren. Open "DATEI1" For Output As #1 ' Datei für Ausgabe öffnen. Kill "DATEI1" ' Versuch, geöffnete Datei zu ' löschen. On Error Goto 0 ' Fehlerbehandlung aus. On Error Resume Next ' Fehlerbehandlung ' zurückstellen. ObjectRef = GetObject("Word1.Basic") ' Nicht existierendes Objekt ' starten 'Auf mögliche Automatisierungsfehler überprüfen. If Err.Number = 440 Or Err.Number = 432 Then prüfen. ' Erklärung für Benutzer ausgeben und anschließend Err-Objekt ' zurücksetzen. Mldg = "Fehler beim Versuch, das Automatisierungsobjekt zu öffnen!" MsgBox Mldg, , "Test für Zurückstellung von Fehlern" Err.Clear ' Felder des Err-Objekts ' zurücksetzen End If Exit Sub ' Vor Fehlerbehandlung beenden. ErrorHandler: ' Fehlerbehandlungsroutine. Select Case Err.Number ' Fehlernummer auswerten. Case 55 ' Fehler "Datei bereits ' geöffnet". Close #1 ' Geöffnete Datei schließen. Case Else ' Andere Fälle hier bearbeiten... End Select Resume ' Ausführung in der Zeile ' fortsetzen, die den Fehler End Sub ' ausgelöst hat. Für das Auslösen benutze "RAISE" Quelle: MSDN Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.