Autor: Peter Haserodt  --- Aus Excel VBA - Gruppe: Tutorials

Fehlerbehandlung (4) - Fehlerketten

Autor: Peter Haserodt - Erstellt: --      - Letzte Revision: --Gruppenthema: 7 Folgen 1 2 3 4 5 6 7 Sie sind in Folge:5
Wichtiger Hinweis:
Dies ist ein Teil des Fehlerbehandlungs Tutorials.
Starten Sie unbedingt mit dem Anfang, also mit : Fehlerbehandlung (0) - Einführung

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 1Routine MeineA1
Mit Fehlerbehandlung
Routine MeineA2
Mit Fehlerbehandlung
Routine MeineA1
Variante 2Ohne Fehlerbehandlung
Routine MeineA2
Mit Fehlerbehandlung
Variante 3Routine MeineA1
Mit Fehlerbehandlung
Routine MeineA2
Ohne Fehlerbehandlung
Variante 4Routine 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