Autor: Peter Haserodt --- Aus Excel VBA - Gruppe:
TutorialsFehlerbehandlung (4) - Fehlerketten
Autor: Peter Haserodt - Erstellt: -- - Letzte Revision: --Gruppenthema: 7 Folgen 1 2 3 4 5 6 7 Sie sind in Folge:5
Fehlerketten
Gerade für den Einsteiger in die Fehlerbehandlung ist es manchmal unverständlich, wo Fehler aufgelöst werden.
Dies betrifft die Aufrufe von Unterroutinen.
Schauen wir uns ein Schema an:
Variante 1 | Routine MeineA1 | |
| Mit Fehlerbehandlung | |
| | Routine MeineA2 |
| | Mit Fehlerbehandlung |
| | |
| | |
| Routine MeineA1 | |
Variante 2 | Ohne Fehlerbehandlung | |
| | Routine MeineA2 |
| | Mit Fehlerbehandlung |
| | |
| | |
Variante 3 | Routine MeineA1 | |
| Mit Fehlerbehandlung | |
| | Routine MeineA2 |
| | Ohne Fehlerbehandlung |
| | |
| | |
Variante 4 | Routine MeineA1 | |
| Ohne Fehlerbehandlung | |
| | Routine MeineA2 |
| | Ohne Fehlerbehandlung |
Und gleich dazu ein Code für die erste Variante:
Public Sub MeineA1()
Dim i As Long, k As Long
On Error GoTo Fehler
Call MeineA2
i = 3 / k
Exit Sub
Fehler:
MsgBox "Fehler in Sub MeineA1 " & vbCrLf & "Fehlernummer: " & Err.Number & _
vbCrLf & "Fehlerbeschreibung: " & Err.Description
End Sub
Public Sub MeineA2()
Dim i As Long, k As Long
On Error GoTo Fehler
i = 3 / k
Exit Sub
Fehler:
MsgBox "Fehler in Sub MeineA2" & vbCrLf & "Fehlernummer: " & Err.Number & _
vbCrLf & "Fehlerbeschreibung: " & Err.Description
End Sub
Analyse:
Wir haben immer das Szenario, dass aus der Sub MeineA1 die Sub MeineA2 aufgerufen wird.
Wie und wo werden aber bei welchen Varianten Fehler abgefangen?
Fangen wir mit der Variante 1 an (Beispielcode)
Hier haben wir in jeder Sub eine Fehlerbehandlung und auftretende Fehler werden jeweils in der Sub behandelt.
Variante 2
Sie können diese testen, indem Sie im Beispielcode in der Sub MeineA1 die Zeile mit On Error Goto auskommentieren.
Die Wirkungen:
Tritt in der MeineA2 ein Fehler auf, wird dieser behandelt. Tritt in der MeineA1 ein Fehler auf, bleibt dieser unbehandelt und das Programm schmiert ab.
Variante 3
Sie können diese testen, indem Sie im Beispielcode in der Sub MeineA2 die Zeile mit On Error Goto auskommentieren und in MeineA1 wieder einkommentieren.
Die Wirkungen:
Tritt in der MeineA2 ein Fehler auf, wird er nach oben - zur MeineA1 weitergeleitet und dort abgearbeitet.
Beachten Sie aber dabei, dass in der MeineA1 kein anderer Code mehr ausgeführt wird, da die Fehlerbehandlung dort greift!
Tritt in MeineA1 ein Fehler auf, wird er dort abgearbeitet.
Variante 4
Da muss ich wohl nichts mehr dazu sagen - oder?
Egal wo ein Fehler auftaucht, das Programm schmiert ab!
Userformen Achtung!
Innerhalb von Userformen gilt dieses Prinzip auch.
Aber nicht beim Aufruf von Userformen durch eine Routine.
Nehmen wir an, Sie haben eine Userform mit dem Namen frmHallo.
Diese starten Sie aus einem allgemeinen Modul in einer Sub mit frmHallo.Show
Nehmen wir weiterhin an, dass Sie in dieser Startprozedur eine Fehlerbehandlung haben.
Diese wird aber nicht ausgelöst, wenn ein Fehler in der Userform auftaucht, sondern das Programm schmiert ab.
Somit ist es absolut notwendig, in Userformen in entscheidenen Routinen eine Fehlerbehandlung zu haben.
Hier ist keine Fehlerkette vom Aufruf der Userform zu Fehlern in der Userform!
Weitere Artikel der Gruppe: Tutorials Aus Excel VBA
Nach oben