Debuggen mit dem Editor

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.

Kompilieren

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.

Einzelschritt

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.

Haltepunkte

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.

Überwachung

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.