Debugging im VBA-Editor, Teil 1

Wer mit VBA arbeitet, hat im Gegensatz zu Makros einige Möglichkeiten, den Programmablauf zu beobachten und auf diese Weise Fehler aufzudecken. Auch wenn der VBA-Editor bereits einige Jährchen auf dem Buckel hat und seit Jahren weder VBA noch der VBA-Editor erweitert wurde, bietet er doch einige Möglichkeiten zum Debugging. Dieser Artikel zeigt, wie Debugging funktioniert und welche Werkzeuge der VBA-Editor dazu anbietet.

Was ist Debugging

Unter Debugging versteht man das Entfernen von Bugs. Bugs Damit sind Programmfehler gemeint. Während diese Bezeichnung für Fehler wohl unter Ingenieuren schon länger gängig war, wurde er von Grace Hopper salonfähig gemacht: Dieser fand nämlich 1947 bei den Arbeiten am Mark II tatsächlich eine Motte als Auslöser eines Fehlers vor (siehe Wikipedia).

Unter VBA versteht man unter Debugging vor allem die Untersuchung des Pro-gramm-ablaufs, wobei Prozeduren mit geeigneten Menübefehlen oder Tasten-kom-bi-nationen in mehr oder weniger großen Schritten durchlaufen werden. Bei jedem Schritt lassen sich die aktuellen Werte von Variablen ermitteln. Falsch oder nicht gefüllte beziehungsweise gesetzte Variablen sind der Hauptgrund für logische Fehler im Programmablauf.

Statt die Prozeduren schrittweise zu durchlaufen, können Sie auch gleich festlegen, an welcher Stelle diese angehalten werden soll. Tritt hingegen ein Laufzeitfehler auf, bietet der VBA-Editor automatisch die Möglichkeit, die fehlerhafte Stelle zu untersuchen. Doch genug der warmen Worte – schauen wir uns doch gleich die passenden Werkzeuge an.

Debugging im Fehlerfall

Wer sich noch nicht aktiv um das Thema Debugging gekümmert hat, wird wohl am ehesten durch einen Fehler damit in Verbindung gekommen sein. Nehmen wir folgende Funktion zum Dividieren als Beispiel:

Public Function Dividieren(intDividend As Integer, _
         intDivisor As Integer) As Single
     Dim sngErgebnis As Single
     sngErgebnis = intDividend / intDivisor
     Dividieren = sngErgebnis
End Function

Wenn Sie diese Funktion mit den Werten 3 und 0 über das Direktfenster aufrufen, erscheint die Fehlermeldung aus Bild 1. Dort finden Sie unter anderem eine Schaltfläche mit der Beschriftung Debuggen, mit der Sie in den Debugging-Modus einsteigen können.

Laufzeitfehler mit der Möglichkeit, zu debuggen

Bild 1: Laufzeitfehler mit der Möglichkeit, zu debuggen

Ein Klick auf diese Schaltfläche schließt die Fehlermeldung und hebt die den Fehler auslösende Zeile im VBA-Editor farblich hervor (siehe Bild 2). Sie können nun beispielsweise mit der Maus über die in der Zeile enthaltenen Variablen fahren, um ihre Werte anzuzeigen.

Debugging eines Laufzeitfehlers

Bild 2: Debugging eines Laufzeitfehlers

Dies gelingt übrigens auch auf andere Weise (manchmal – vor allem bei komplizierteren Ausdrücken – zeigt sich die direkte Anzeige im Codefenster etwas störrisch): Dabei nehmen Sie das Direktfenster zuhilfe und lassen sich dort mit der Debug.Print-Anweisung den Inhalt der zu untersuchenden Variablen ausgeben. Dabei geben Sie den Namen der Variablen als Parameter an (siehe Bild 3). Hier erkennen Sie direkt, dass der Divisor einen unzulässigen Werte angenommen hat (vermutlich unerwarteterweise) und können eine entsprechende Prüfung einbauen.

Variablenwerte über das Direktfenster ermitteln

Bild 3: Variablenwerte über das Direktfenster ermitteln

Variableninhalt ändern

Wenn Sie eine umfangreichere Abfolge von Routinen testen, möchten Sie an dieser Stelle möglicherweise nicht von vorn beginnen.

Dann gibt es mehrere Möglichkeiten (die alle natürlich nicht mit einem Neustart mit korrigiertem Code gleichzusetzen sind) – zum Beispiel diese:

  • Sie ändern den unerwünschten Variablenwert und fahren mit der Prozedur fort.
  • Sie ändern das Ergebnis und fahren dann mit der Prozedur fort.

Im ersten Fall weisen Sie der Variablen intDivisor über den Direktbereich einen neuen Wert zu:

intDivisor = 1

Danach führen Sie die Prozedur mit einem Klick auf die Taste F5 oder durch das Aufrufen des Menü-befehls Ausführen|Fortsetzen fort. Die Zeile löst keinen Fehler mehr aus und die Funktion liefert das entsprechende Ergebnis. Wenn Sie lieber gleich den vollständigen Rückgabewert der Funktion ändern möchten, verschieben Sie den gelben Pfeil, der die aktuell auszuführende Zeile markiert, einfach auf die Zeile End Function und weisen Sie dem Rückgabewert Dividieren der Funktion den gewünschten Wert zu – beispielsweise so (siehe Bild 4):

Aktuelle Zeile ändern

Bild 4: Aktuelle Zeile ändern

Dividieren = 3

Auf diese Weise können Sie auch alle anderen Zeilen anspringen oder Variablenwerte ändern.

Starten, unterbrechen und beenden

Möchten Sie weiterlesen? Dann lösen Sie Ihr Ticket!
Hier geht es zur Bestellung des Jahresabonnements des Magazins Access [basics]:
Zur Bestellung ...
Danach greifen Sie sofort auf alle rund 400 Artikel unseres Angebots zu - auch auf diesen hier!
Oder haben Sie bereits Zugangsdaten? Dann loggen Sie sich gleich hier ein:

Schreibe einen Kommentar