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

Fehlerbehandlung (5) - Fehlerbehandlung - Überlegungen

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

Fehlerbehandlung - Überlegungen

Wir haben bis jetzt uns auf die eigentlichen Techniken konzentriert.
Jetzt möchte ich Ihnen mögliche Strukturen der Fehlerbehandlung vorstellen.
Beachten Sie aber, dass dies nur Ansätze sind, eine Fehlerbehandlungsstruktur hier vorzustellen, würde dann doch den Rahmen sprengen. Diese müssen Sie sich dann doch selber erarbeiten.
Außerdem wird es jetzt ein wenig trocken, wie immer wenn es um Theorie geht.

Sobald man ein umfangreiches Programm hat, werden in der Regel Arbeitsschritte in Routinen ausgelagert.
Ganz von den wiederkehrenden Anweisungen abgesehen, die sowieso in Routinen gekapselt sind.

Aus Sub mach Function

Stellen wir uns folgendes - stark vereinfachtes - Beispiel vor:

Sie haben eine Steuerprozedur, nennen wir diese Sub Steuerung.
Dann haben Sie zwei weitere Prozeduren, nennen wir diese Sub Arbeit1 und Sub Arbeit2.

Diese rufen Sie aus Ihrer Steuerung auf, vielleicht so:

Public Sub Steuerung
Call Arbeit1
Call Arbeit2
End Sub

Und stellen wir uns weiter vor, dass Sie tatsächlich in Ihren Arbeitssubs Fehlerbehandlungen eingebaut haben.
(Es soll solche Menschen geben)
Das Problem ist aber, dass Sie diese Information ob ein Fehler aufgetaucht ist, nicht an Ihre Steuerungssub zurückbekommen und nicht daruf reagieren können.
Wenn zum Beispiel in Arbeit1 ein Fehler auftaucht, kann es notwendig sein, nicht mehr mit Arbeit2 fortzufahren sondern aufzuhören oder sonstwas zu machen.

Eine simple - und auch gute - Lösung, ist es, die Arbeitssubs in Functions umzuändern und bei der Rückgabe mitzuteilen, ob ein Fehler aufgetaucht ist.
Ein Beispiel für Arbeit1:

Public Function Arbeit1() As Boolean
On Error GoTo Fehler
' Hier der Code
Arbeit1 = True
Exit Function
Fehler:
' Hier eventuelle Fehlerausgaben
End Function
Unsere Steuerungsprozedur würde sich der Aufruf von Arbeit1 wie folgt ändern:
If Not Arbeit1 Then
' Hier nun die Reaktion, wenn ein Fehler passiert ist.
End if

Analyse:

In unserer Arbeit1 wird der Code durchlaufen und als letzte Aktion vor dem Exit Function der Rückgabewert auf True gesetzt. Wird im Code ein Fehler ausgelöst, wird diese True Setzung nicht erreicht und die Funktion gibt False zurück.

In unserer Steuerungsroutine können wir nun auf den Rückgabewert reagieren.
Dies ist eine gängige Methode.

Alternativ können wir natürlich auch die Function als Long deklarieren und auf verschiedene Fehler reagieren.
Wenn wir z.B. verschiedene Fehlerbehandlungen in der Function haben, können wir verschiedene Werte zurückgeben und entsprechend darauf reagieren:

Public Function Arbeit1() As Long
On Error GoTo Fehler1
' Hier der Code
On Error GoTo Fehler2
' Hier der Code
On Error GoTo Fehler3
' Hier der Code
Exit Function
Fehler1:
' Hier eventuelle Fehlerausgaben
Arbeit1 = 1
Exit Function
Fehler2:
' Hier eventuelle Fehlerausgaben
Arbeit1 = 2
Exit Function
Fehler3:
' Hier eventuelle Fehlerausgaben
Arbeit1 = 3
End Function
In unserer Steuerungsroutine könnte der Code dann so aussehen:

iRueckGabe = Arbeit1
If iRueckGabe <> 0 then
Select Case iRueckGabe
Case 1
Aktion
Case 2
...
End Select
End if

Tritt in der Arbeit1 kein Fehler auf, erhalten wir eine 0 als Rückgabewert und wissen, alles ist gut gelaufen.
Ansonsten können wir auf die verschiedenen Fehlerarten reagieren.

Globale Fehlervariablen

Eine weitere Möglichkeit ist sicherlich, Globale Fehlervariablen bzw. eine Globale Fehlervariable zu deklarieren und diese in den entsprechenden Untertroutinen auf True zu setzen, wenn ein Fehler auftaucht.
In der aufrufenden Routine prüft man dann jeweils ob diese True ist, nach dem Aufruf.
Hier darf man natürlich nicht vergessen, diese wieder auf False zu setzen, wenn man weiter im Programm (trotz des Fehlers) machen will.

Diese gezeigte Möglichkeit ist sicherlich jedem Theoretiker zuwider aber für den Praktiker durchaus eine Option.

Weitere Möglichkeiten

... überlasse ich nun Ihnen, sich zu erarbeiten.
Wichtig ist nur, dass Sie ein System haben, um auf Fehler zu reagieren.
Und zwar zuverlässig!


Weitere Artikel der Gruppe: Tutorials Aus Excel VBA
Nach oben