Autor: Peter Haserodt  --- Aus Excel VBA - Gruppe: Tutorials

Option Explicit, Intellisense und Techniken des Schreibens

Autor: Peter Haserodt - Erstellt: --      - Letzte Revision: --

Viele Fehler entstehen durch Unachtsamkeit bei Variablen. Ausserdem kann man sich sehr viel Schreibarbeit sparen, wenn man die richtige Technik benutzt.
Und in diesem Zuge kann man auch die Lesbarkeit von Code erheblich verbessern.

Option Explicit sieht man sehr oft in Modulen jeder Art ganz oben stehen. Warum aber ist dies sinnvoll und warum sollte es immer dort stehen?
Durch Option Explicit wird eine Variablendeklaration erforderlich, d.h. ich muss alle meine benutzten Variablen deklarieren oder VBA meldet mir einen Fehler. Ich kann also keine Prozedur mehr derart schreiben:

Option
Explicit

Private
Sub KeineDeklaration()
x = 4
MsgBox x
End
Sub

Beim Ausführen dieser Prozedur würde eine Fehlermeldung kommen, dass x nicht definiert wurde. Ohne Option Explicit würde die Prozedur anstandslos durchlaufen. Um keine Fehlermeldung zu bekommen müsste ich z.B.
Dim x As Integer
hinter meine Prozedurdeklaration schreiben.
Mache ich mir damit nur das Leben schwer?
Schnell kann man auf den Gedanken kommen: Damit spare ich mir doch jede Menge Schreibarbeit. Tatsache ist, wie wir weiter unten sehen werden, das Gegenteil der Fall. Viel wichtiger ist, dass wir mit der fehlenden Deklaration von Variablen und unter Weglassen von Option Explicit uns jede Menge Fehler einhandeln können, die wir eventuell später nicht mehr sehen. Ein kleines Beispiel:

Ohne Option Explicit - Provision minimiert

Private
Sub MeineProvision()
meinumsatz = 5000
If meinumsaz > 4000 Then
Range("A1") = "Bekomme 200 EUR Provision"
Else
Range("A1") = "Bekomme 0 EUR Provision"
End If
End Sub


Bei dieser kleinen Prozedur sieht man den Fehler sofort. Aber wenn der Code etwas länger ist, kann dies Stunden dauern, bis man den Fehler findet, wenn man denn überhaupt erkennt, dass ein Fehler vorliegt. Das vergessen eines t's kostet mich in diesem Fall 200 EUR!
 Peter Haserodt
  • Formelhilfe
  • Makroentwicklung
  • VBA-Programmierung
  • + + + + + + + + +

Mit Option Explicit wäre dies nicht passiert!


Wenn ich meine Variable meinumsatz deklariert hätte, bei benutztem Option Explicit, käme die Fehlermeldung bei If meinumsaz … und schon wäre mir mein Schreibfehler aufgefallen. (Die Fehlermeldung erfolgt beim Durchlaufen der Prozedur - Editieren).

Wichtig ist dabei zu verstehen, dass auch die Deklaration der Variablen meinumsatz im obigen Beispiel nicht geholfen hätte. Auch ein Dim meinumsatz As Integer hätte an der 0 - Provision nichts verändert.!
VBA trifft in der If-Abfrage auf eine noch nicht gesetzte Variable meinumsaz, diese ist leer und wird im beschriebenen Fall vom Wert als 0 interpretiert.

Deklaration von Variablen

Die Deklaration von Variablen ist absolut wichtig, um Fehlerquellen zu reduzieren.
Aber erst in Verbindung mit Option Explicit können nicht deklarierte Variablen von VBA bei der Kompilierung erkannt werden und mir werden so Schreibfehler in meinen Variablen aufgezeigt!


Intellisense

Ein weiterer Vorteil der Deklaration von Variablen ist die Bereitstellung der Intellisense beim Schreiben.

Fast jeder weiß, dass nach dem Schreiben von Objekten, z.B. ActiveWorkbook und dem Eingeben eines Punktes mir in einer Liste die Eigenschaften und Methoden des Objektes zur Auswahl angeboten werden.
Wir alle schätzen dieses Feature. Weit weniger bekannt dagegen ist, dass ich diese Intellisense schon vorher nutzen kann. Probieren Sie folgendes aus:

Schreiben Sie nur act und drücken Sie dann die Tastenkombination STRG + LEERTASTE. Und wieder erhalten wir eine Liste zur Auswahl. Auch ein ac hätte schon genügt, selbst ein a!!! Aber es empfiehlt sich zumindest die ersten 2-3 Zeichen einzugeben, um die Auswahl zu reduzieren.

Intellisense auslösen

Durch Betätigung der Tastenkombination STRG + LEERTASTE wird die Intellisense - Autovervollständigung, wenn eine solche an dieser Stelle zur Verfügung steht, ausgelöst.


Lange Variablennamen für Schreibfaule


Option
Explicit

Private
Sub TesteDieIntellisense()
Dim sMeinLangerVariablenName As String
End
Sub

Geben Sie obiges in ein Modul ein. Gehen Sie dann in die leere Zeile und geben Sie dort nur sme ein und drücken Sie dann die STRG + LEERTASTE und freuen Sie sich.
Ist meine Variable erstmal deklariert kann ich mir weitgehend die Schreibarbeit sparen!

Technik für Variablennamen

Wenn man sich eine weitere Technik bei der Vergabe von Variablennamen angewöhnt hat man eine weitere Möglichkeit schnell Schreibfehler aufzudecken.

Grundsätzlich soll man seinen Variablen immer sprechende Namen geben. Weiterhin sollte die Variablen einen (kleingeschriebenen) Kennzeichner haben, anhand dessen man ihren Typ erkennen kann. Und drittens sollten Wortwechsel innerhalb einer Variablen dann immer mit einem Grossbuchstaben beginnen.

Über den Kennzeichner von Variablen gibt es viele Diskussionen - beliebt ist hier die "Ungarische Notation", die Regeln dafür beinhalten. Leider ist diese aber nicht eindeutig, d.h. es gibt viele Varianten dieser "Ungarischen Notation". In der einen wird ein b für Boolean in der nächsten ein boo für Boolean in der dritten ein bln für Boolean genutzt usw.

Welcher Art Sie dies für sich handhaben ist letztendlich Geschmackssache und eine Frage mit wem man zusammenarbeitet. Aber vorhanden sollte der Kennzeichner auf jeden Fall sein. Man kann später den Code sehr viel besser lesen und weiß selbst später genau, welchen Typ die Variable hat. Ich habe mir z.B. angewöhnt: b für Boolean, s für String, i für jede Art von Zahl (hier bin ich faul, besser wäre es sicherlich noch zwischen den einzelnen Zahlentypen zu unterscheiden) o für ein Objekt etc…
Nach diesem Kennzeichner folgt ein sprechender Name z.B. sDerBuchTitel as String oder
bStimmtEs AS Boolean
.

Sie sehen, dass ich jedes Wort mit einem Grossbuchstaben begonnen habe. Dies hat den absoluten Vorteil, dass ich wenn ich den Namen dann später im Code benutze und schreibe (anstatt Intellisense zu benutzen) ich diesen immer klein schreibe. (Tatsächlich sollte man immer Code kleinschreiben außer bei Namensvergaben wie Deklarationen oder Prozedurnamen etc…)
Habe ich sie deklariert, wird mir nämlich nach Abschluss der Zeile sofort der Name so geändert, wie ich ihn mal deklariert hatte. Ich kann dadurch sofort Schreibfehler erkennen, d.h. wenn keine Grossbuchstaben auftauchen, habe ich mich verschrieben.

In obigen Beispiel könnte ich nach der Deklaration in einer Zeile smeinlangervariablenname schreiben. Nach Abschluss dieser Zeile wird dieser sofort umgesetzt in die richtige Schreibweise, d.h. so wie ich die Variable in der Deklaration beschrieben hatte.

Schreibe ich seinlangervariablenname und schließe die Zeile ab, bleibt der Name so bestehen und ich erkenne sofort einen Schreibfehler.

Dies gilt auch für alle Objekte die ich benutze, bzw. sonstige VBA - Eigene Strukturen.
Z.B. schreibe ich : if left( smeinlangervariablenname,3) then … und nach Abschluss der Zeile kann ich sofort Schreibfehler erkennen wenn dort nicht Grossbuchstaben eingesetzt wurden, dies sich also geändert hat in: If Left(sMeinLangerVariablenName, 3) Then

Und auch für Prozeduren …
gilt die Intellisense. Um die Prozedur TesteDieIntellisense später im Projekt zu schreiben, brauchen Sie wieder nur die Anfangsbuchstaben und STRG+LEERTASTE außerdem wird sie in der Großkleinschreibung angepasst.

Ein kleines Ärgernis:

Wie wir sehen, ist die Deklaration von Variablen nur nützlich. Durch Option Explicit werde ich dazu gezwungen (und gewöhne mich sehr schnell daran Variablen zu deklarieren, wenn mir bei der Kompilierung immer Definitions-Fehler angezeigt werden)

Also wäre es doch gut, wenn Option Explicit standardmäßig in jedem Modul stehen würde! Tatsächlich können wir dies ganz einfach erreichen:
Gehen Sie im VBA-Editor auf den Menüpunkt Extras und dort auf Optionen und hier das Register Editor.
Setzen Sie dann bei Variablendeklaration erforderlich einen Haken:


In Zukunft wir bei jedem neuen Modul automatisch Option Explicit oben erscheinen.
Warum Microsoft dies nicht standardmäßig aktiviert hat, ist ein Rätsel.
Abschließend:
Wenn Sie die hier dargestellten Tipps beherzigen, werden Sie sehr viel weniger auf Fehlersuche gehen müssen. Außerdem ersparen Sie sich jede Menge Tipparbeit.

Weitere Artikel der Gruppe: Tutorials Aus Excel VBA
Nach oben