Häufige Fehler bei Makros sind fehlerhafte Variablen. Standardmäßig müssen Sie nicht zwangsweise eine Variable deklarieren, bevor Sie Sie verwenden können.
Sub ohneVariablenDeklaration() Zahl = 10 MsgBox Zahl End Sub
Im obigen Beispiel wird der Variable Zahl zu Beginn der Wert 10 zugewiesen ohne dass die Variable vorher definiert wurde. Mit MsgBox wird Ihnen in der nächsten Zeile der Wert der Variable Zahl über eine Messagebox am Bildschirm angezeigt. Tipp: Eine Ausgabe der Variable per Messagebox eignet sich auch sehr gut um einen Fehler in einem Makro zu finden. So können Sie prüfen, ob den Variablen die richtigen Werte zugewiesen worden sind, oder ob das Makro nur deshalb nicht richtig läuft, weil Sie bei der Deklaration oder Zuweisung der Variablen einen Fehler gemacht haben.
Wenn im obigen Beispiel vor der ersten Zeile Option Explicit steht, erhalten Sie statt der Ausgabe des Variablenwerts eine Fehlermeldung mit dem Hinweis darauf, dass die Variable Zahl nicht deklariert wurde.
Option Explicit Sub ohneVariablenDeklaration() Zahl = 10 MsgBox Zahl End Sub
Damit dieses Makro funktioniert, muss die Variable Zahl vor Ihrer Verwendung deklariert werden. Hierfür Schreiben Sie in der Zeile vor Zahl = 10 den Deklaration Dim Zahl as Integer. Sie können natürlich auch einen anderen Variablentyp statt Integer verwenden, er muss nur zu dem zugewiesenen Wert (hier die Zahl 10) passen. Tipp: am Besten deklarieren Sie die genutzten Variablen immer direkt nach der Zeile Sub Makroname(), dann sind Sie mit der Deklarierung auf der sicheren Seite und Sie finden die genutzten Variablen problemlos wieder.
Option Explicit Sub ohneVariablenDeklaration() Dim Zahl as Integer Zahl = 10 MsgBox Zahl End Sub
Im ersten Moment werden Sie jetzt vielleicht sagen, dann ist es doch besser, wenn ich Option Explicit nicht verwende. Dadurch spare ich mir die Deklaration der Variablen. Wenn Ihr Makro fehlerfrei programmiert wurde, funktionieren die Makros ohne die Option Explicit auch ohne die Deklaration der Variablen. Die Option Explicit hat aber zwei entscheidende Vorteile. Zum einen merken Sie sofort, wenn Sie sich beim Variablennamen irgendwo verschrieben haben. In diesem Fall würde Ihr Makro ohne die Option Explicit fehlerhaft ausgeführt, da Sie unter Umständen durch den Schreibfehler eine leere Variable verwenden würden.
Sub Umsatzziel() Umsatzziel = 5000 If Umsatziel > 2000 Then MsgBox "Das Umsatzziel wurde erreicht." Else MsgBox "Das Umsatzziel wurde verfehlt." End If End Sub
Hier wurde in der If-Funktion das zweite “z” in Umsatzziel vergessen. Ohne die Option Explicit hat Excel die Variable Umsatziel parallel zur Variable Umsatzziel angelegt. Da dieser Variable aber kein Wert zugewiesen wurde wird dieses Makro jetzt fehlerhaft ausgeführt. Mit der Option Explicit wird das Makro nicht ausgeführt, sondern Sie erhalten die Fehlermeldung in Bezug auf die nicht deklarierte Variable Umsatziel.
Der weitere Vorteil von Option Explicit ist, dass Sie weil Sie immer zur Deklaration aller Variablen gezwungen sind, gezielt einen Variablentyp zuweisen müssen. Ohne die Option und Deklaration der Variable wird standardmäßig der Variablentyp Variant mit einem Speicherbedarf von 16 Bytes verwendet. Dieser Typ ist sehr flexibel, da er z.B. Zahlen, Textzeichen, Währung oder Datumwerte beinhalten kann. Effizienter ist es allerdings, wenn Sie einer Variable, die z.B. immer ganze Zahlen enthält, abhängig von der Größe der Zahl entweder Integer (2 Bytes) oder Long (4 Bytes) zuweisen. Einer Variable, die Text enthält definieren Sie dagegen mit dem Variablentyp String.
Die Option Explicit können Sie im VBA-Editor über “Extras”, “Optionen” in der Registerkarte “Editor” mit dem setzen des Häkchens unter “Variablendeklaration erforderlich” automatisch aktivieren. Dadurch wird jedes neue Modul, Userform oder Tabellenblatt im VBA-Editor zukünftig automatisch den Zusatz beinhalten.
Wo kann ich dieses “Häkchen” bei Mac setzten? Optionen wird auf dem Mac nicht angezeigt.
Mfg
@Patrick: Auf dem Mac müsste es über Excel -> Preferences -> Editor gehen. Dort müsste die Auswahl bei “Require variable declaration” gesetzt werden.