Fehlersuche in VBA

Zeilenweise

Wenn eine VBA-Rou­tine nicht so läuft wie gewün­scht oder uner­wün­schte bzw. fehler­hafte Ergeb­nisse her­auskom­men, dann hil­ft es so gut wie immer, den Inhalt, den Wert ein­er Vari­ablen zu kon­trol­lieren.

Die eine Möglichkeit ist, den Code im Einzelschritt-Modus durch­laufen zu lassen. Dazu rufen Sie die Rou­tine entwed­er über AltF8 und der Schalt­fläche Schritt auf:

Einzelschritt-Aufruf über Alt-F8

Einzelschritt-Aufruf über Alt-F8

In diesem Fall wird der VBA-Edi­tor geöffnet und die erste Zeile der Proze­dur wird gelb hin­ter­legt dargestellt:

Die erste Zeile im Code ist automatisch markiert

Die erste Zeile im Code ist automa­tisch markiert

Oder aber Sie befind­en sich im VBA-Edi­tor und der Schreibcur­sor ste­ht irgend­wo in dem zu prüfend­en Mod­ul. Dann haben Sie eine ähn­liche Aus­gangssi­t­u­a­tion. In bei­den Fällen geht es nun darum, den Code zeilen­weise abzuar­beit­en. Drei Möglichkeit­en stelle ich Ihnen hier nun vor, nehmen Sie jene, die Ihnen am meis­ten zusagt:

Entwed­er Sie Klick­en auf die entsprechende Schalt­fläche, um beim ersten Schritt zur ersten Zeile des Moduls zu gelan­gen oder danach in die jew­eils näch­ste Zeile.

Die Schaltfläche für den Einzelschritt-Modus

Die Schalt­fläche für den Einzelschritt-Modus

Für diese und auch alle anderen Möglichkeit­en gilt, dass Dim-Anweisun­gen und reine Kom­men­tarzeilen immer über­sprun­gen wer­den. Die zweite Möglichkeit:

Einzelschritt-Modus über das Menü

Einzelschritt-Modus über das Menü

Und die dritte (von mir fast immer einge­set­zte) ist schon direkt hierüber in der Abbil­dung zu sehen: Die Taste F8 bringt den gewün­scht­en Erfolg. Im fol­gen­den Text werde ich darum auch immer F8 ver­wen­den, Sie kön­nen selb­stver­ständlich die von Ihnen favorisierte Meth­ode ein­set­zen.

Wenn Sie direkt im Edi­tor starten, dann wer­den Sie als erstes F8 drück­en, um zur ersten Zeile des Codes zu gelan­gen. Danach natür­lich immer wieder F8, um Zeile für Zeile durchzuar­beit­en. Wenn Sie nun den Wert ein­er bes­timmten Vari­ablen über­prüfen wollen, dann beacht­en Sie bitte, dass die entsprechende Zeile erst abgear­beit­et wor­den sein muss, damit die Vari­able den (neuen) Wert erhal­ten hat. Also, so lange eine Zeile gelb her­vorge­hoben ist, ist sie noch nicht aus­ge­führt wor­den.

In der fol­gen­den Abbil­dung sehen Sie, wie Sie rasch den Wert ein­er Vari­ablen kon­trol­lieren kön­nen und dass der Vari­ablen Wert1 zu diesem Zeit­punkt noch kein Wert zugewiesen wor­den ist. Um das zu erre­ichen, zeigen Sie ein­fach nur auf die zu prüfende Vari­able. Sie sehen vielle­icht, dass der Schreibcur­sor in der markierten Zeile ganz links in der ersten Spalte ste­ht, der Mauszeiger aber knapp rechts des Vari­ablenna­mens. Für eine kurze Zeit ist dann ein kleines Hin­we­is­fen­ster mit dem Vari­ablenna­men und dem entsprechen­den Wert zu sehen:

Variablen-Werte direkt durch zeigen erkennen

Vari­ablen-Werte direkt durch zeigen erken­nen

Das geht übri­gens nicht nur in markierten Zeilen, das funk­tion­iert im gesamten Mod­ul. Wenn Sie jet­zt näm­lich per F8 in die näch­ste Zeile gelan­gen und noch ein­mal auf die gle­iche Stelle wie hierüber zeigen, wer­den Sie sofort erken­nen, dass der Wert nun 5 ist.

Nun liegt es ja in der Natur der Sache, dass ein­er Vari­ablen im Laufe des Pro­gramms ver­schiedene Werte zugewiesen wer­den. Wenn Sie über län­gere Zeit den Wert kon­trol­lieren möcht­en, dann bietet sich das Überwachungs­fen­ster an. Über das Menü Ansicht kön­nen Sie es ein- und beispiel­sweise per Recht­sklick im Fen­ster auch wieder aus­blenden:

Das Pulldown-Menü des Überwachungsfensters

Das Pull­down-Menü des Überwachungs­fen­sters

Markieren Sie ein­fach den Vari­ablenna­men oder auch eine kom­plette Funk­tion und ziehen Sie die Markierung in das Überwachungs­fen­ster. Ab jet­zt kön­nen Sie jed­erzeit den Wert dieser Vari­ablen oder des Aus­drucks in dem Fen­ster erken­nen:

Anzeige der Variablenwerte im Überwachungsfenster

Anzeige der Vari­ablenwerte im Überwachungs­fen­ster

Beim Menüpunkt Debuggen find­en Sie weit­ere hil­fre­iche Möglichkeit­en zu diesem Punkt.

▲ nach oben …

Bei dieser aus­ge­sprochen kurzen Rou­tine ist es ja kein The­ma, die weni­gen Zeilen einzeln zu check­en oder die Über­sicht im Überwachungs­fen­ster zu behal­ten und Zeile für Zeile durchzustep­pen. Bei 50 oder mehr Zeilen wird das ein­fach nur nervig. Da bietet sich die Möglichkeit, an (fast) beliebiger Stelle einen Hal­tepunkt einzubauen.

Die dauer­hafteste Lösung: Schreiben Sie an gewün­schter Posi­tion ein­fach eine neue Zeile Code mit der Anweisung Stop. Dann kön­nen Sie das Pro­gramm nor­mal ablaufen lassen und der Ablauf wird in der Zeile ange­hal­ten. Ab hier kann es dann per F8 weit­er gehen.

Wenn alles zu Ihrer Zufrieden­heit läuft, wer­den Sie die Zeile ent­fer­nen. Und natür­lich kann diese Anweisung auch mehrfach im Code vorkom­men. Wollen Sie jedoch nur für kurze Zeiträume und auch einen ein­fach wieder zu ent­fer­nen­den Hal­tepunkt schaf­fen, dann bietet sich noch fol­gende Meth­ode an: Klick­en Sie in jen­er Zeile, die dann nicht mehr abgear­beit­et wer­den soll, in gle­ich­er Höhe auf den linken, grauen Rand des Code-Fen­sters. Danach wird sich dort ein brauner Punkt zeigen und die Code-Zeile wird eben­falls braun markiert:

Per Klick gesetzter Haltepunkt, Zeile ist braun markiert

Per Klick geset­zter Hal­tepunkt, Zeile ist braun markiert

Ein erneuter Klick auf den Punkt wird die Funk­tion­al­ität wieder aufheben. Gle­ich­es (und noch mehr) erre­ichen Sie übri­gens auch über das Menü Debuggen, allerd­ings muss der Schreibcur­sor dann in der betrof­fe­nen Zeile ste­hen.

▲ nach oben …

Direktfenster

Eine weit­ere auch von mir lange unter­schätzte Möglichkeit der Fehlerkon­trolle bietet die Aus­gabe von Werten im Direk­t­fen­ster. Dort kön­nen Sie beispiel­sweise die Chronolo­gie ein­er Vari­ablen sehr gut nachver­fol­gen:

Ausgabe-Chronologie der  Variablenwerte im Direktfenster

Aus­gabe-Chronolo­gie der Vari­ablenwerte im Direk­t­fen­ster

Sie öff­nen das Fen­ster am ein­fach­sten mit StrgG. Sie fügen in den Code die entsprechende Befehlszeile ein (siehe Abbil­dung oben) und exakt der aktuelle Wert wird dann aus­gegeben. Manch­mal kann das auch der Ret­tungs­fallschirm sein, wenn Sie beispiel­sweise mit der Anweisung Application.DisplayAlerts = False die Anzeige von Hin­weisen und Fehler­mel­dun­gen aus­geschal­tet haben und wegen eines Fehlers im Code diese nicht wieder eingeschal­tet wer­den kon­nte. Das kann dann fatale Fol­gen haben. In einem solchen Fall geben Sie direkt im Fen­ster des Direk­t­bere­ichs die Code-Zeile Application.DisplayAlerts = True ein und alles ist in Bezug auf die Hin­weise und Mel­dungs­fen­ster wieder gut.

[NachOben­Let­zte Verweis=„T&T: Code-Fehler­suche”]
Dieser Beitrag wurde unter Coding / Programmieren, Mit VBA/Makro, Tipps und Tricks abgelegt und mit , , , , verschlagwortet. Setze ein Lesezeichen auf den Permalink.