VBA

Auf dieser Seite erscheinen unterschiedliche Tipps und Tricks. Weitere Artikel können Sie bei mir bestellen.

Fehlersuche in VBA

Ein Programm in VBA (Visual BAsic for Application) ist meistens schnell geschrieben. Die meiste Zeit wird benötigt, Fehler zu suchen und das Programm Anwendersicher ;-) zu machen. Ein deutliches Beispiel dafür sind gekaufte Programme, bei denen man sich häufig als Betatester fühlt. Schreiben Sie Ihre Programme fehlerfrei, der Anwender wird es Ihnen danken.
In VBA werden grundsätzlich drei Fehlerarten unterschieden:
Syntaxfehler:
Das sind vorwiegend Schreibfehler. Diese Fehler werden im VBA-Fenster sofort angezeigt und sind erfahrungsgemäß schnell zu beheben.
Laufzeitfehler:
 Diese Fehlerart ist schon unangenehmer, da sie erst zur Laufzeit, also dann, wenn das Programm bereits läuft, zum Tragen kommen. Hinzu kommt, dass bei dieser Fehlerart auch der Anwender eine Rolle spielt. Sobald der Anwender zu einer Aktion aufgefordert wird, kann alles Mögliche passieren. Anwender sind da oft sehr einfallsreich. Hier ist es wichtig, solche Fehler möglichst im Vorfelde abzufangen.
Logische Fehler:
Diese Fehler sind die schlimmsten Fehler, denn sie werden oftmals erst vom Anwender bemerkt. Zur Abwehr solcher Fehler hilft nur das Testen Ihres Programms. Lassen Sie Ihr Programm auch von unabhängigen Personen testen. Erst dann können Sie sich mit ruhigem Gewissen an die Verteilung des Programms wagen.

Das VBA Hilfesystem

Die Hilfe in VBA ist mittlerweile richtig gut geworden. Mit dem Befehl „Microsoft Visual Basic Hilfe“ haben Sie Zugriff auf die: Microsoft Visual Basic Reference und die Microsoft Visual Basic Documentation. Im Visual Basic Code funktioniert die Hilfe noch eleganter.
Markieren Sie den Befehl, zu dem Sie Hilfe benötigen, und betätigen Sie anschließend die Funktionstaste „F1“. Schon wird Ihnen geholfen.
Die Dokumentation zu Ihrem Befehl wird eingeblendet. In vielen Fällen befinden sich auch einige Beispielprogramme in der Hilfe. Diesen Code, oder Teile daraus, können Sie kopieren und in Ihren eigenen Programmcode einfügen.

Zusätzlich steht Ihnen der Objektkatalog zur Verfügung. Der Objektkatalog enthält eine Auflistung aller verfügbaren Objekte mit den dazugehörigen Methoden, Eigenschaften und Ereignissen.
Klicken Sie zum Einblenden des Objektkataloges im VBA Fenster auf das Symbol „Objektkatalog“. Der Objektkatalog wird eingeblendet.
Im obersten Auswahlfenster des Kataloges legen Sie fest, in welcher Bibliothek gesucht werden soll. Im Auswahlfenster darunter tippen sie den Namen des gesuchten Befehles ein. Klicken Sie dann auf das Symbol mit dem „Fernglas“, und schon wird der gesuchte Befehl mit allen Fundstellen angezeigt. Mit einem Klick auf das Symbol „In die Zwischenablage kopieren“ wird der ausgewählte Befehl kopiert und kann dann direkt in den Visual Basic Code eingefügt werden.

VBA Objektkatalog  Der Objektkatalog hilft bei der Suche nach Befehlen

Fehlersuchmethoden

Syntaxfehler erkennen Sie sofort nach der fehlerhaften Eingabe: Beim Kompilieren erkennt VBA diesen Fehler, stellt die fehlerhafte Codezeile in roter Schrift dar und blendet zusätzlich ein Hinweisfenster ein, in dem steht, was nicht korrekt ist. Mit einem Klick auf die Schaltfläche „Hilfe“ bekommen Sie weitere Informationen zu diesem Fehler.

VBA Syntaxfehler  Syntaxfehler verzeiht VBA nicht.

Laufzeitfehler treten erst dann auf, wenn Sie das Programm ausführen. Diese Fehler sind oftmals recht schwierig zu finden. Vor allem in komplexen Programmen ist diesen Fehlern nicht so einfach auf die Schliche zu kommen.

VBA Laufzeitfehler  Laufzeitfehler

Wenn ein Laufzeitfehler in Ihrem Programm auftritt, betätigen Sie im Dialogfenster des Fehlers die Schaltfläche „Debuggen“. Der große Vorteil: Ihr Programmcode wird direkt an der Stelle angehalten und gelb markiert, an dem der Laufzeitfehler aufgetreten ist. In einigen Fällen können Sie dann sofort auf den Fehler schließen und ihn beseitigen.


Schritt für Schritt
Bevor Sie Ihr fertiges Programm ausführen, sollten Sie es in Einzelschritten überprüfen. Im Einzelschrittmodus führt VBA eine Anweisung aus, hält danach an und wartet auf den Befehl, die nächste Anweisung abzuarbeiten. Sie können bei dem Einzelschrittmodus sehen, welche Anweisungen gerade ausgeführt werden, was sie bewirken und welchen Wert die Variablen zu diesem Zeitpunkt haben. Zum Ausführen des Programms im Einzelschrittmodus stellen Sie zunächst den Cursor in eine beliebige Anweisung der Prozedur (Zwischen den Befehlen „Sub …“ und End Sub“). Wählen Sie dann den Befehl „Einzelschritt“ im Menübefehl „Debuggen“. Alternativ können Sie auch die Funktionstaste „F8“ betätigen. Die erste Zeile der Prozedur wird farblich markiert und zusätzlich mit einem Pfeil markiert. Diese Markierung zeigt Ihnen an, welche Anweisung als nächste ausgeführt wird.

VBA Einzelschritt   Der Einzelschrittmodus arbeitet die Anweisungen Schritt für Schritt ab.

Zeilen, die Kommentare und Variablendeklarationen enthalten, werden im Einzelschrittmodus übersprungen.
Um selbst einzelne Anweisungen zu überspringen oder zu wiederholen, schieben Sie den gelben Pfeil mit gedrückter linker Maustaste an die gewünschte Stelle im Programmcode. Ein grauer Pfeil zeigt Ihnen während des Verschiebens an, an welcher Position er sich momentan befindet.
Zum Beenden des Testmodus im Einzelschritt rufen Sie den Menüpunkt „Ausführen“, „Zurücksetzen“ auf oder, noch einfacher, Sie klicken auf das Symbol „Zurücksetzen“.


Haltepunkte setzen

Um die Auswirkung einer Prozedur an bestimmten Stellen des Programms zu kontrollieren, bieten sich Haltepunkte an. Die Anweisungen werden an den gesetzten Haltepunkten unterbrochen.
Zum Setzen eines Haltepunktes positionieren Sie den Cursor innerhalb der Zeile, in der Sie einen Haltepunkt setzen möchten. Rufen Sie dann den Menübefehl „Debuggen“, „Haltepunkt ein/aus“ auf.
Alternativ betätigen Sie die Funktionstaste „F9“.
Oder noch einfacher: Klicken Sie in der grauen Spalte links neben der entsprechenden Visual Basic Anweisung.

Die Haltepunkte werden durch einen Punkt am Rand der Anweisungszeile angezeigt. Zusätzlich wird der Code braun mit weißer Schrift markiert. Haltepunkte wirken nur temporär und werden nicht gespeichert. Um Haltepunkte dauerhaft einzubauen benutzen Sie den Befehl „Stop“.
 
VBA Haltepunkte  Haltepunkte stoppen das Programm.

Zum Löschen aller Haltepunkte wählen Sie den Menübefehl „Debuggen“, „Alle Haltepunkte löschen“. Alternativ benutzen Sie die Tastenkombination „Strg – Umschalt – F9“.


Laufzeitfehler abfangen

Laufzeitfehler sollten Sie bereits vor dem Auftreten abfangen.
Dafür enthält VBA eine Fehlerbehandlungsroutine: Die „On Error“ Anweisung.
Mit dieser Anweisung können Sie Laufzeitfehler kontrolliert abfangen und dafür sorgen, dass das Programm gesteuert weiterlaufen kann. Dabei wirken die Anweisungen in leicht abgewandelter Form unterschiedlich:

Befehl           Auswirkung  
On Error GoTo Sprungmarke Wenn einer der diesem Befehl folgenden Anweisungen einen Laufzeitfehler erzeugt, springt   das Programm zur angegeben Sprungmarke und wird ab dort weiter ausgeführt.  
On Error Resume Next   Wenn einer der diesem Befehl folgenden Anweisungen einen Laufzeitfehler erzeugt, springt   das Programm zur angegeben Sprungmarke und wird ab dort weiter ausgeführt. Beim Auftreten eines Laufzeitfehlers in den nächsten Anweisungen wird die den Laufzeitfehler erzeugende Anweisung ignoriert und mit der nächsten Anweisung weitergemacht.  
On Error GoTo 0   Die Fehlerbehandlungsroutine in der aktiven Prozedur wird deaktiviert.
 





Zum Definieren einer Sprungmarke muss diese mit einem Namen und einem Doppelpunkt versehen werden.

Sie können Sprungmarken an jeder beliebigen Stelle in einer Prozedur benutzen. Ein typisches Beispiel für eine Sprungmarkenprozedur:

Sub Spungmarke()
Dim Eingabe As Integer
On Error GoTo fehlersprungmarke 'Bei Fehler zur Sprungmarke springen
Eingabe = InputBox("Bitte um Eingabe: ")
MsgBox Eingabe
Exit Sub 'Bei korrektem Programmablauf Programm hier verlassen
fehlersprungmarke: 'Hier ist die Sprungmarke MsgBox "Bitte nur Ziffern eingeben"
End Sub

Bei Eingabe einer Zahl läuft das Programm korrekt durch.
Wichtig ist der Befehl “Exit Sub“ vor der Sprungmarke. Er beendet die Prozedur an dieser Stelle.

Ohne diesen Befehl würde das Programm korrekt durchlaufen und trotzdem die Fehlermeldung erscheinen. Wenn keine Ziffer in die InputBox eingegeben wird, schlägt die Fehlerroutine zu und das Programm wird erst ab der Sprungmarke weiter ausgeführt.

Variablenüberwachung

Bei komplexen Fehlern müssen Sie die Variablen im Auge behalten. VBA bietet Ihnen einige Möglichkeiten zur Variablenüberwachung an.
Wenn Sie eine Prozedur im Einzelschrittmodus ausführen, überwachen Sie die Variablen am einfachsten mit der Quickinfo. Führen Sie dazu den Mausanzeiger auf den entsprechenden Ausdruck. Der Visual Basic Editor blendet dann den aktuellen Variablenwert in einem kleinen Fenster ein.
VBA Qickinfo   Quickinfo.

Um mehr als einzelne Variablen zu überprüfen, blenden Sie das Überwachungsfenster ein. Sie finden es im Menübefehl „Ansicht“, „Überwachungsfenster“.
Jetzt fügen Sie die zu überwachenden Ausdrücke in das Überwachungsfenster ein.
Positionieren Sie dazu den Cursor in den entsprechenden Ausdruck. Klicken Sie dann auf die rechte Maustaste und wählen Sie im jetzt eingeblendeten Kontextmenü den Befehl „Überwachung hinzufügen“ aus. Das gleichnamige Dialogfenster wird eingeblendet. Mit einem Klick auf die Schaltfläche „OK“ wird der Überwachungsausdruck im Überwachungsfenster aufgenommen. Wiederholen Sie diesen Vorgang für alle Variablen, die Sie überwachen wollen. Führen Sie die Prozedur jetzt in Einzelschritten aus. Alle Variableninhalte werden, abhängig von Stand der Einzelschritte, angezeigt.

VBA Überwachungsfenster  

Falls Ihre Prozedur nicht sehr viele Variablen enthält, kommen Sie noch einfacher an die Variableninhalte heran. Schalten Sie dazu das Überwachungsfenster aus und mit dem Menübefehl „Ansicht“, „Lokalfenster“ das Lokalfenster ein. Im Lokalfenster werden alle Variablen und Konstanten während der Programmausführung angezeigt.

Es geht auch direkt

Wenn Sie einzelne Anweisungen sofort ausführen und prüfen wollen, bietet sich das Direktfenster an. Sie erreichen es über „Ansicht“, „Direktfenster“. Das Fenster „Direktbereich“ wird eingeblendet.
Um den Wert einer Variablen oder Konstanten anzuzeigen, tippen Sie ein Fragezeichen gefolgt von der Variablen oder Konstanten ein. Betätigen Sie anschließend die „Return-Taste“.
Das Ergebnis wird im Direktfenster angezeigt.
Sie können auch unmittelbar ausführbare Anweisungen in das Direktfenster eintippen. Sobald Sie die „Return-Taste“ drücken wird diese Anweisung ausgeführt.
Um ein Modul aus dem Direktfenster zu starten, geben Sie den Modulnamen gefolgt von einem Punkt und dem Prozedurnamen ein. Ein Druck auf die „Return-Taste“ führt die Anweisung aus.

VBA Direktbereich   Im Direktbereich probieren Sie Anweisungen sofort aus.


Fazit

Die Möglichkeiten zur Fehlererkennung und zur Fehlerbehebung sind in VBA sehr ausgereift. Die Entscheidung, welche Möglichkeiten Sie zur Fehlersuche und zur Fehlerbeseitigung einsetzen, bleibt allerdings Ihnen überlassen. Die Praxis zeigt: Man kann ein Programm gar nicht oft genug prüfen, bevor man es veröffentlicht.

        (c) Jan2010 by Peter Schnoor

Wenn Sie mögen, können Sie einen Kommentar  per Mail  senden.

Vielen Dank für Ihre Mühe.