Excel VBA – Wie Sie Fehler in Ihren Makros finden
Dieser Beitrag ist ein Teil der VBA Grundlagen Serie.
Um Fehler in Ihren VBA Makros zu finden, ist es wichtig, die Anweisungen im Code Schritt für Schritt durchzugehen. So können Sie nachvollziehen wie das Ergebnis zustande kommt und sicherstellen, dass das Makro das macht, was Sie wollen.
Diesen Vorgang nennt man Debuggen. In diesem Beitrag zeige ich Ihnen wie Sie dabei vorgehen. Excel stellt verschiedene Möglichkeiten bereit, die Änderungen der Werte während des Programmablaufs nachzuverfolgen.
Stellen Sie zunächst sicher, dass der Direktbereich und das Lokal-Fenster eingeblendet sind. In diesen werden die aktuellen Werte der Variablen angezeigt. Dies können Sie über den Menüpunkt Ansicht steuern.
Blenden Sie außerdem die Symbolleiste Debuggen ein, um den Programmablauf steuern zu können. Sie gelangen dorthin über den Menüpunkt Ansicht → Symbolleisten.
Nun kann es losgehen. Ich möchte den Prozess des Debuggens anhand des folgenden Beispiels erläutern:
Function MappeEx(strName As String) As Boolean MappeEx = False MappeEx = Dir(strName) <> "" End Function Sub TestDatei() Const Datei = "C:\TestMappe.xlsx" Debug.Print Datei If MappeEx(Datei) = True Then MsgBox "Die Datei existiert" Else MsgBox "Die Datei existiert nicht" End If End Sub
Wir haben eine Funktion die durch ein Makro aufgerufen wird. In der Funktion MappeEx
wird geprüft, ob eine bestimmte Datei existiert. Die Funktion selbst wird durch das Makro TestDatei
aufgerufen. In diesem Makro wird auch der Name der zu suchenden Datei bestimmt.
Rufen Sie bitte über die Tastenkombination ALT+F11
die Entwicklungsumgebung auf, legen Sie ein neues Modul ein und kopieren Sie den Code hinein.
Um in den Debugger-Modus zu springen wird ein Haltepunkt benötigt. Wie der Name schon andeutet, unterbricht dieser den Programmablauf und hält das Makro an einer bestimmten Stelle an. Diese Stelle können Sie selbst bestimmen.
111 VBA Makros die Ihr Leben leichter machen
Wollen Sie Ihre langweiligen Routineaufgaben loswerden? Möchten Sie Excel an Ihre Bedürfnisse anpassen, Berechnungen automatisieren, eigene Dialogfelder erstellen und vieles mehr? Dieses Buch zeigt Ihnen, wie Sie Ihre Aufgaben schnell und einfach mit VBA erledigen.
Um einen Haltepunkt zu setzen, können Sie einfach auf die Leiste links vom Code klicken.
Alternativ können Sie den Haltepunkt auch über die Debugger-Leiste setzen oder die Taste F9
drücken.
Wenn Sie nun das Makro mit der Taste F5
starten, hält das Makro an dieser Stelle an. Sie haben drei Möglichkeiten zur Navigation, die sogenannten Schritte:
- Einzelschritt (
F8
) - Prozedurschritt (
SHIFT+F8
) - Prozedur abschließen (
STRG+SHIFT+F8
)
Mit dem Einzelschritt gehen Sie die Anweisungen im Code Schritt für Schritt durch. So können Sie mit der folgenden Anweisung den Inhalt der Konstante Datei
im Direktbereich ausgeben:
Debug.Print Datei
Gleichzeitig wird der Wert im Lokal-Fenster angezeigt.
Sie können aber auch einfach die Maus über die jeweilige Variable halten und so den Wert dieser Variable einsehen.
In der nächsten Zeile wird der Unterschied zwischen dem Einzelschritt und Prozedurschritt deutlich. Wenn Sie den Einzelschritt benutzen, springen Sie in die aufgerufene Funktion MappeEx
. Das Debugging wird dann in der Funktion fortgesetzt. Somit laufen Sie Gefahr, sich in Tiefen des Codes zu verlieren. Wenn Sie jedoch den Prozedurschritt benutzen, bleiben Sie auf der Ebene Ihres Makros und das Ergebnis der Funktion wird angezeigt.
Falls Sie sich mit dem Einzelschritt verirren, finden Sie über die Taste Prozedur abschließen wieder zurück zu Ihrem Makro, auf die Oberfläche.
Anstatt einen Haltepunkt zu setzen können Sie auch einen sogenannten Überwachungsausdruck verwenden. Damit wird die Programmausführung automatisch angehalten, wenn eine Variable einen bestimmten Wert annimmt oder sich ändert. Nutzen Sie dazu den Menüpfad Debuggen → Überwachung hinzufügen.
Hier können Sie den Ausdruck und die Art der Überwachung festlegen. In unserem Beispiel wollen wir die Programmausführung unterbrechen, wenn der Wert MappeEx der Prozedur MappEx
sich ändert.
Wenn Sie nun alle Haltepunkte löschen und das Makro mit der F5
Taste starten, springt die Ausführung in den Debuggermodus und zwar an der Stelle, an der sich der Wert MappeEx geändert hat.
Die Beispiel Excel Datei mit dem sofort einsetzbaren Makro und 111+ andere Makros, die Ihr Leben leichter machen, finden Sie hier.
Beeindrucke deinen Chef mit coolen Excel Tricks!
- Lasse dich von deinen Kollegen nicht abhängen!
- Spare Zeit und nutze diese für angenehmere Dinge
- Steigere deine Produktivität und Effizienz
- Es ist leicht - In meinem Newsletter gebe ich Schritt für Schritt Anleitungen die jeder versteht
- Bei der Anmeldung zu meinem Newsletter erhälst du das Buch „Excel Tricks die deinen Chef beeindrucken“ als Willkommensgeschenk.
Falls Ihnen dieser Beitrag weitergeholfen hat, wäre es eine sehr nette Anerkennung meiner Arbeit wenn Sie z.B. Ihre Bücher über Amazon bestellen würden. Wenn Sie ein Produkt kaufen, erhalte ich dafür eine Provision. Für Sie ändert sich am Preis des Produktes gar nichts. Ich möchte mich an dieser Stelle jetzt schon für Ihre Unterstützung bedanken.
Bildquelle: Pixabay, CC0 Public Domain
Hallo Herr Reis,
Ich habe eine userForm gestaltet.
Jetzt hab ich folgendes problem.
Ich bekomme die inhalte der 18 Spalten aus *Tabelle1 nicht in die *ListBox1 der *UserForm1 können sie mir einen Tipp geben wie ich das anstellen kann.
* Das sind vordefinierte Namen von excel in meiner Datei diese habe ich auch nicht geändert
Die Daten Fangen in Zeile 2 an.
Zeile 1 sind die Überschriften.
Wie lade ich die ListBox1 neu wenn ich einen Datensatz aus der Tabelle Lösche.
Freundliche Grüße
A.Scoins
Hallo Herr Scoins, versuchen Sie es mal mit listbox1.List=.Range(Ihr Zellbereich).Value
Viele Grüße
Denis
Hallo Her Reis,
Das Problem habe ich mittlerweile gelöst hab das über das Eigenschaftsfenster gelöst.
Kann ich ihnen vielleicht meine UserForm mal senden das sie sich diese mal ansehen könnten ich hab auch ein Word Dokument wo die Erklärung drin stehen würde ich bräuchte nur ihre aktuelle E-Mailadresse.
Es wäre echt super wenn sie mir helfen könnten.