Visual Basic for Applications Grundlagen: Behandlung von Fehlern

Das aufspüren und beseitigen von Programmfehlern ist eine der aufwendigsten und wichtigsten Arbeiten des Programmierers. Dabei sind weniger die einfachen Syntaxfehler von Bedeutung, als vielmehr die kleinen versteckten Ungereimtheiten, die die Funktion eines Programms erheblich beeinträchtigen können. Im folgenden werden wir uns mit den Möglichkeiten beschäftigen, die Visual Basic for Applications für die Fehlerbehandlung bietet.

Bei der Programmierung von Visual Basic for Applications-Programmen können grundsätzlich zwei Arten von Fehlern auftreten: Eingabefehler oder Compilerfehler und Laufzeitfehler. Bei den Eingabefehlern – auch Compilerfehler genannt – handelt es in der Regel um Syntaxfehler, die bei der Eingabe des Programmcodes aufgetreten sind. Diese Fehler werden aber meist schon bei der Eingabe des Programms vom Editor aufgespürt und können von Ihnen direkt beseitigt werden.

Schwerwiegender sind da schon die Laufzeitfehler. Sie treten während der Programmausführung auf. Dazu werfen wir einen Blick auf das nachfolgende Programm.

Sub FehlerBsp1()

‚ Fehlerbehandlung mit VBA-Programmen

Dim Wert1 As Double

Dim Wert2 As Double

Dim Ergebnis As Double

Wert1 = Val(InputBox(„Geben Sie die erste Zahl ein:“))

Wert2 = Val(InputBox(„Geben Sie die zweite Zahl ein:“))

Ergebnis = Wert1 / Wert2

MsgBox „Ergebnis: “ & Str(Ergebnis), vbInformation, „VBA-Fehlerbeispiel“

End Sub

Prozedur, die einen Laufzeitfehler erzeugen kann.

In unserem Beispielprogramm wird der Anwender aufgefordert zwei Zahlen einzugeben. Die Zahlen werden dann dividiert. Bei der Division kann ein typischer Laufzeitfehler auftreten, wenn die zweite Zahl nicht von Null verschieden ist.

Fehlermeldung bei einem Laufzeitfehler, hier Division durch Null.

Ein weiterer Grund für Laufzeitfehler sind Überschreitungen des Wertebereichs einer Variablen oder der Zugriff auf Dateien, die nicht existieren. Diese Laufzeitfehler sollten aber von einem guten Programm berücksichtigt werden und mit einer entsprechenden Behandlungsroutine nicht zum Absturz oder der Beendigung des Programms führen. Hierzu wird in Visual Basic for Applications der GoTo-Befehl in einer etwas erweiterten Form eingesetzt.

On Error GoTo-Befehl

Damit Laufzeitfehler nicht zum sofortigen Programmende führen, wurde der Befehl On Error GoTo eingeführt. Beim Auftreten eines Laufzeitfehlers wird die hinter GoTo angegebene Marke – das Sprungziel – angesprungen und das Programm an dieser Stelle fortgesetzt. Die Behandlung von Laufzeitfehlern wird aber erst dann aktiv, wenn das Programm während der Ausführung auf diesen Befehl trifft. Sie sollten daher den Befehl On Error GoTo immer an den Anfang einer Prozedur stellen, damit die Fehlerbehandlung sofort aktiv ist. Das in der Einleitung vorgestellte Programm könnte zur Behandlung von Laufzeitfehlern folgendermaßen geändert werden:

Sub FehlerBsp2()

‚ Fehlerbehandlung in VBA-Programmen

‚ und einem Meldungsfenster

On Error GoTo Fehler

Dim Wert1 As Double

Dim Wert2 As Double

Dim Ergebnis As Double

Wert1 = Val(InputBox(„Geben Sie die erste Zahl ein:“))

Wert2 = Val(InputBox(„Geben Sie die zweite Zahl ein:“))

Ergebnis = Wert1 / Wert2

MsgBox „Ergebnis: “ & Str(Ergebnis), vbInformation, „VBA-Fehlerbeispiel“

Exit Sub

Fehler:

MsgBox „Ein schwerer Fehler ist aufgetreten!“, vbCritical, „Schwerwiegender Fehler“

Exit Sub

End Sub

Programm mit Fehlerbehandlungroutine.

Sollte in diesem Programm ein Laufzeitfehler auftreten, dann wird die Ausführung an der durch Fehler: markierten Position fortgesetzt. Es erscheint ein Nachrichtenfenster mit einem entsprechenden Hinweis auf dem Bildschirm. Tritt kein Fehler während der Laufzeit auf, dann wird das Ergebnis der Division angezeigt und die Fehlerbehandlungsroutine übersprungen. Dazu dient der Befehl Exit Sub. Dieser beendet die weitere Ausführung einer Prozedur.

Der Resume-Befehl

Im Fehlerfall wird die Programmausführung mit Hilfe des Befehls On Error Goto an einer anderen Stelle fortgesetzt. Nachdem die Behandlung des Fehlers abgeschlossen ist, muß Visual Basic for Applications wissen, wie es das Programm fortsetzen soll. In unserem Beispiel haben wir das Programm einfach über den Befehl Exit Sub beendet. Falls der Fehler in der Fehler­behandlungs­routine aber beseitigt werden kann, ist es sinnvoll das Programm fortzusetzen. Dazu dient der Resume-Befehl, der anstelle des Exit Sub-Befehls eingefügt wird. Dieser Befehl steht in drei Varianten zur Verfügung:

Variante                        Beschreibung

Resume [0]                       Der Programmablauf wird mit dem Befehl fortgesetzt, der den Fehler verursacht hat. Dies ist immer dann sinnvoll, wenn Sie den Fehler in einer Fehlerbehandlungsroutine beseitigen konnten. Die Angabe der Null ist optional und hat keine Bedeutung.

Resume Next                    Der Programmablauf wird nach dem Befehl, der den Fehler verursacht hat, fortgesetzt. Dies ist dann sinnvoll, wenn der fehlerhafte Befehl durch Standardwerte ersetzbar ist. Dies geschieht durch die Fehler­behandlungs­routine.

Resume <Sprungmarke>    Der Programmablauf wird an der durch <Sprungmarke> angegebenen Stelle fortgesetzt.

Varianten des RESUME-Befehls

Hilfsmittel für die Fehlersuche

Tritt während der Ausführung eines Visual Basic for Applications-Programm ein Fehler auf, dann wird das Programm unterbrochen und es erscheint auf dem Bildschirm eine entsprechende Meldung. Falls Sie dann die Schaltfläche TESTEN betätigen, befinden Sie sich wieder im Editor und die Stelle, an der der Fehler aufgetreten ist wird gelb markiert. Sie befinden sich nun im Debug-Modus des Visual-Basic-Editors. Das Programm wird nicht beendet, Sie können es mit Hilfe der Taste ( schrittweise fortsetzen. Im Fenster LOKALE AUSDRÜCKE werden alle in der Prozedur befindlichen Variablen mit Ihren Werten aufgelistet.

Sie können das Programm an der markierten Stelle ändern und dann wieder über das Menü AUSFÜHREN und den Befehl MAKRO AUSFÜHREN fortsetzen. Alternaitv können Sie das Programm auch über den Befehl ZURÜCKSETZEN abbrechen. Falls Sie die Symbolleiste DEBUGGEN über das Menü ANSICHT > SYMBOLLEISTEN > DEBUGGEN aktiviert haben, dann können Sie auch die entsprechenden Schaltflächen betätigen.

Sollten Sie in Ihrem Programm logische Fehler haben, das sind Fehler die den Programmablauf nicht unterbrechen, dann können Sie diese durch gezieltes Setzen eines Haltepunkts aufspüren. Einen Haltepunkt fügen Sie über das Menü DEBUGGEN und den Befehl HALTEPUNKT EIN/AUS an der Cursorposition in Ihren Programmcode ein. Wird bei der Programmausführung nun dieser Haltepunkt entdeckt, dann wird das Programm an der Stelle angehalten und auf dem Bildschirm erscheint der Visual-Basic-Editor. Jetzt können Sie das Programm schrittweise mit Hilfe der Taste [F8] ausführen, um logische Fehler aufzuspüren.

Nach oben scrollen