Auf dieser Seite erscheinen
unterschiedliche Tipps und Tricks. Weitere Artikel können Sie bei mir bestellen.
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.
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.
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.
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.
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“.
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.
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.
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.
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.