Wie wir schon gesehen haben, bemüht sich der VBA-Editor, uns bei der Eingabe von Code zu unterstützen. Dennoch kommt es in der Praxis immer wieder vor, dass sich Tippfehler einschleichen oder man Eingaben schlicht vergisst. Der Editor kann während der Eingabe oft nicht erkennen, ob das Absicht ist, sondern erst, wenn der Code ausgeführt werden soll. Allerdings bietet der Editor Möglichkeiten, den Programmierer auch bei der Fehlersuche, dem „debuggen“, zu unterstützen.
Ein erster hilfreicher Hinweis, ob Fehler vorliegen, ergibt sich, wenn man
frisch geschriebenen Code stets vor der Ausführung kompiliert. Dazu dient
der Menüpunkt Debuggen / Kompilieren von Projekt
.
Option Explicit
Sub Debugger() Dim alpha As String alfa = "Ein beliebiger Text" End Sub
Hier wurde eine Variable alpha
erzeugt, aber dann versucht, eine
Variable namens alfa
zu verwenden. Versucht man, den Code zu kompilieren,
findet der Debugger den Fehler und setzt den Fokus auf die Variable - und zwar, ohne
dass der Code erst ausgeführt wird.
Setzt man der Cursor in eine beliebige Prozedur, und wählt
Debuggen / Einzelschritt
, so wird die Prozedur gestartet, allerdings
nur die erste Zeile abgearbeitet. Wählt man den Menüpunkt erneut (oder drückt die
[F8]
-Taste), geht es in der nächsten Zeile weiter, usw. Die gerade
aktuelle Zeile wird dabei hervorgehoben. Fährt man mit der Maus über eine beliebige
Variable, wird deren aktueller Wert angezeigt.
Hat man Genug vom Einzelschritt, kann man den Code entweder mit
Ausführen / Zurücksetzen
abbrechen oder mit
Ausführen / Sub-/Userform ausführen
normal weiterlaufen lassen.
Es gibt Momente, in denen man nur an einem bestimmten Punkt die Ausführung des Codes anhalten möchte.
Option Explicit Sub warte() Dim i As Long For i = 0 To 1000 Debug.Print i Next i= i / 5 Debug.Print i End Sub
Will man hier nur wissen, welchen Wert i
unmittelbar vor der
letzten Ausgabe hat, will man natürlich nicht per Einzelschritt die gesamte Schleife
durchlaufen. Man kann auch in den grauen Balken auf der linken Seite klicken, und
zwar bei der Zeile, für die man sich interessiert (oder alternativ in der
„Bearbeiten“-Symbolleiste den Button mit der Hand klicken):
Option Explicit Sub warte() Dim i As Long For i = 0 To 1000 Debug.Print i Next i= i / 5 Debug.Print i End Sub
Der Code läuft nun ganz normal durch, bis er an den Haltepunkt kommt. Dort wird er angehalten und alles ist genau so, als wenn man mit „Einzelschritt“ dort hingegangen wäre.
Mit Debuggen / Überwachung hinzufügen
öffnet man eine Eingabemaske,
mit der man Variablen überwachen kann und damit den Code z. B. nur dann anhalten
lassen, wenn sich die Variable ändert.