TL;DR — Setzen Sie
Option Explicitganz an den Anfang jedes Moduls, und VBA weigert sich, ein Makro auszuführen, das eine Variable nutzt, die Sie nie deklariert haben. Ohne es ist ein Tippfehler wietotalSaieskein Fehler — VBA legt still eine neue leere Variable an, Ihre Summe kommt als0zurück, und nichts warnt Sie. Es ist eine Direktive, kein Laufzeitcode: Es läuft zur Compile-Zeit, sodass der Fehler auftaucht, bevor eine einzige Zeile ausgeführt wird. Aktivieren Sie einmal Extras > Optionen > Require Variable Declaration, damit es jedem neuen Modul automatisch hinzugefügt wird.
Option Explicit ' <- immer die erste Zeile des Moduls
Sub Report()
Dim totalSales As Long
totalSales = 100
MsgBox totalSaies ' Tippfehler! Mit Option Explicit: "Variable not defined" - es laeuft nicht
End Sub ' Ohne es: MsgBox zeigt leer/0 und niemand merkt es je
Was Sie lernen
- Das mentale Modell — VBA erfindet für jeden Namen, den Sie tippen, eine Variable
- Der Silent-Typo-Bug, und wie eine einzige Zeile die ganze Klasse davon tötet
- Warum es pro Modul gilt, und die Einstellung, die es für Sie hinzufügt
- Was zu tun ist, wenn Variable not defined Ihren alten Code aufleuchten lässt
- Warum es die Deklaration erzwingt, aber nicht die Datentypen (eine häufige Verwechslung)
- Die Meinung: die eine Einstellung, die Sie einschalten, bevor Sie eine Zeile schreiben
Das mentale Modell: VBA erfindet Variablen hinter Ihrem Rücken
Standardmäßig behandelt VBA jeden Namen, den es noch nie gesehen hat, als Aufforderung, auf der Stelle
eine neue Variable anzulegen, vom Typ Variant, die Empty enthält. Das klingt bequem. Es ist eine Falle.
Es bedeutet, dass VBA nicht zwischen einer Variable, die Sie verwenden wollten, und einer, die Sie sich
vertippt haben, unterscheiden kann — beide sind bloß „ein Name, den es nicht gesehen hat", also werden
beide angelegt, stillschweigend.
Option Explicit nimmt diese Bequemlichkeit weg. Steht es am Anfang des Moduls, kippt die Regel: Jede
Variable muss deklariert sein (mit Dim, Private, Public, Static, Const oder als Parameter), bevor
Sie sie verwenden. Tippen Sie einen nie deklarierten Namen, stoppt der Compiler mit Variable not defined —
bevor das Makro läuft. Sie haben ein wenig Tipparbeit gegen das Versprechen des Compilers eingetauscht, dass
jeder Name in Ihrem Code einer ist, den Sie so meinten.
Drei Token, die das Makro nie ausführt
Option Explicit gehört zu einer kleinen Familie: drei Dinge, die Sie tippen und die das laufende Makro
nie ausführt. Sie prägen die Quelle und die Kompilierung, nicht den Lauf — weshalb Anfänger sie
überspringen und weshalb das Überspringen wehtut.
| Token | Was er mit Ihrer Quelle macht | Was er den Lauf kostet |
|---|---|---|
' Kommentar |
Hinterlässt Notizen und deaktiviert Code, den der Compiler löscht | Nichts — er läuft nie |
_ Zeilenfortsetzung |
Zerlegt eine lange Anweisung über mehrere Zeilen | Nichts — der Parser entfernt sie |
Option Explicit |
Erzwingt, dass jeder Name deklariert wird | Läuft zur Compile-Zeit, sodass Tippfehler sterben, bevor das Makro startet |
Zwei der drei werden vor dem Kompilieren gelöscht; Option Explicit ist das, das handelt — es weist den
Compiler an, Ihre Namen zu überwachen. Es ist das wirkungsvollste der drei, denn der Bug, den es fängt, ist
die teuerste Sorte: der, der eine falsche Antwort statt eines Fehlers erzeugt.
Der Bug, den es tötet: der Tippfehler, der null zurückgibt
Das ist der ganze Fall für Option Explicit in acht Zeilen. Ohne es:
Sub Totals()
Dim revenue As Currency
revenue = 5000
' ...vierzig Zeilen spaeter...
MsgBox "Revenue: " & revanue ' Tippfehler: revAnue
End Sub
revanue wurde nie deklariert, also legt VBA es als leere Variant an. Das Meldungsfenster zeigt
Revenue: — leer — und es gibt keinen Fehler, keine Warnung, keinen roten Text. In einem echten
Bericht ist das eine falsche Zahl, ausgeliefert an jemanden, der ihr vertraut. Das ist die mit Abstand
häufigste Quelle von „mein Makro liefert die falsche Antwort, stürzt aber nicht ab", und es bleibt völlig
unsichtbar, bis jemand merkt, dass die Summe nicht stimmt.
Fügen Sie eine Zeile hinzu, und derselbe Tippfehler wird zu einer Wand, an der Sie nicht vorbeikommen:
Option Explicit
Sub Totals()
Dim revenue As Currency
revenue = 5000
MsgBox "Revenue: " & revanue ' Compile error: Variable not defined (revanue markiert)
End Sub
Das Makro startet nicht einmal. Der Compiler markiert revanue und benennt das Problem. Ein
Zehn-Sekunden-Fix statt eines stillen, ausgelieferten Fehlers.
Es gilt pro Modul — lassen Sie die Einstellung es für Sie hinzufügen
Option Explicit schützt nur das Modul, in dem es steht. Fügen Sie es zu Module1 hinzu, und
Module2 ist noch immer weit offen. Ein neues Modul, das Sie morgen einfügen, hat keines. Sich darauf zu
verlassen, es selbst an den Anfang jedes Moduls zu tippen, ist genau die Art Disziplin, die an dem
hektischen Tag versagt, an dem Sie sie am dringendsten brauchen.
Verlassen Sie sich also nicht auf sich selbst. Öffnen Sie im VBA-Editor Extras > Optionen > Editor und
setzen Sie den Haken bei Require Variable Declaration. Von da an bekommt jedes neue Modul, das Sie
einfügen, automatisch Option Explicit in seiner ersten Zeile. Es ist ein einmaliger Klick, der die sichere
Voreinstellung zur tatsächlichen Voreinstellung macht — das Erste, was Sie auf jedem Rechner einstellen, auf
dem Sie VBA schreiben.
Ein Vorbehalt, den man kennen sollte: Diese Einstellung wirkt nur auf Module, die nach dem Setzen des Hakens erstellt werden. Bereits bestehende Module behalten, was sie hatten, also fügen Sie die Zeile in alte Module weiterhin von Hand ein.
Es in altem Code einschalten: die Wand aus Rot ist der Sinn
Fügen Sie Option Explicit zu einem Modul voller nicht deklarierter Variablen hinzu, und die erste
Kompilierung leuchtet auf wie ein Schaltbrett — Variable not defined, Name um Name. Das ist nicht die
Direktive, die sich zickig gibt; das ist sie, die Ihnen jede Stelle zeigt, an der Ihr alter Code im
Blindflug war. Jeder markierte Name ist entweder eine Variable, die Sie deklarieren müssen, oder ein
Tippfehler, den Sie nie bemerkt haben.
Arbeiten Sie sie einen nach dem anderen ab: Deklarieren Sie die echten (Dim customerName As String — wie,
zeigt VBA Dim) und beheben Sie die Tippfehler. Es ist einmal mühsam und für immer
sicher. Ist ein Modul riesig, fügen Sie die Zeile hinzu, kompilieren Sie, und lassen Sie den Editor Sie mit
Debuggen > Kompilieren zu jedem nicht deklarierten Namen führen. Sie schaffen sich keine Arbeit; Sie lösen
Bugs ein, die schon da waren.
Es erzwingt die Deklaration, nicht die Datentypen
Ein häufiger Lesefehler: Leute denken, Option Explicit mache VBA streng typisiert. Tut es nicht. Es
zwingt Sie, eine Variable zu deklarieren, aber eine Deklaration ohne Typ ist noch immer eine Variant:
Option Explicit
Dim count ' unter Option Explicit erlaubt - aber es ist eine Variant
Dim count As Long ' das wollen Sie eigentlich - eine typisierte Variable
Dim count erfüllt Option Explicit (der Name ist deklariert), gibt Ihnen aber nichts von der
Geschwindigkeit oder Typsicherheit von As Long. Option Explicit schließt das Loch der nicht
deklarierten Namen; echte Typen zu wählen (As Long, As String, As Range) ist eine eigene, ebenso
lohnende Gewohnheit, behandelt in VBA Datentypen. Schalten Sie das Erste ein,
dann üben Sie das Zweite.
Die Meinung: das ist die eine Einstellung, die Sie zuerst einschalten
Es gibt kein ehrliches Argument gegen Option Explicit. Der Preis sind ein paar Dim-Zeilen, die Sie
ohnehin schreiben sollten; der Ertrag ist Immunität gegen den zeitraubendsten Bug in VBA überhaupt — den
stillen Tippfehler, der null zurückgibt und ausgeliefert wird. Jeder erfahrene VBA-Entwickler schaltet auf
einem neuen Rechner Require Variable Declaration ein, bevor er irgendetwas schreibt, und betrachtet ein
Modul ohne Option Explicit als unfertig.
Wenn Sie eine Sache aus diesem Cluster mitnehmen, dann diese: Setzen Sie jetzt den Haken, fügen Sie die Zeile zu den Modulen hinzu, die Sie schon haben, und verbringen Sie nie wieder einen Nachmittag mit der Jagd nach einer falschen Summe, die sich als vertippte Variable entpuppt. Es ist die billigste Versicherung der Sprache.
Wenn die Garantie, die Sie wollen, das ganze Makro ist, nicht eine Variable
Option Explicit garantiert, dass Ihre Namen echt sind. Es kann nicht garantieren, dass Ihre Logik es
ist. Wenn eine kundenrelevante Zahl auf dem Spiel steht, wollen Sie trotzdem etwas, das prüft, ob die
Ausgabe stimmt, nicht nur, ob die Variablen existieren.
ExcelMaster nimmt ein Ziel in
normaler Sprache — „gleiche diese beiden Blätter ab und markiere jede Zeile, in der die Summen nicht
übereinstimmen" — schreibt den Code, sichert Ihre Arbeitsmappe, führt ihn aus und reicht die Zeilen zurück,
die die Prüfung nicht bestehen. Sie beschreiben das Ergebnis, das Sie erwarten; es erledigt die Arbeit und
zeigt Ihnen, wo Realität und Erwartung auseinandergehen — ein Maß an Sicherheit, das keine einzelne
Direktive geben kann.
Häufig gestellte Fragen
Was macht Option Explicit in VBA?
Es zwingt Sie, jede Variable vor der Verwendung zu deklarieren. Mit Option Explicit am Anfang eines Moduls
löst jeder nie deklarierte Name einen Compile error aus (Variable not defined), sodass Tippfehler und
nicht deklarierte Variablen erwischt werden, bevor das Makro läuft, statt still zu leeren Variants zu werden.
Wohin gehört Option Explicit?
In die allererste Zeile eines Moduls, oberhalb jedes Sub und jeder Function, in den
Declarations-Abschnitt des Moduls. Es gilt nur für dieses Modul, gehört also an den Anfang jedes Moduls, das
Sie schützen wollen.
Wie füge ich Option Explicit automatisch hinzu?
Öffnen Sie im VBA-Editor Extras > Optionen > Editor und setzen Sie den Haken bei Require Variable
Declaration. VBA fügt Option Explicit dann am Anfang jedes neuen Moduls ein, das Sie erstellen. Zu
bereits bestehenden Modulen fügt es das nicht hinzu — die aktualisieren Sie von Hand.
Warum bekomme ich Variable not defined, nachdem ich Option Explicit hinzugefügt habe?
Weil das Modul Variablen enthält, die Sie nie deklariert haben — oft Tippfehler, manchmal Namen, die Sie
schlicht zu Dim vergessen haben. Der Compiler markiert jeden einzelnen. Deklarieren Sie die echten
Variablen (zum Beispiel Dim total As Long) und korrigieren Sie die falsch geschriebenen; jeder Fehler ist
ein latenter Bug, den die Direktive gerade offengelegt hat.
Erzwingt Option Explicit Datentypen?
Nein. Es erzwingt die Deklaration, nicht die Typisierung. Dim count erfüllt es, ist aber noch immer
eine Variant. Für Typsicherheit und Geschwindigkeit fügen Sie selbst einen Typ hinzu — Dim count As Long — was eine eigene gute Gewohnheit ist.
Getestet in
Getestet in: Excel 365 (Windows 11), VBA 7.1 — zuletzt geprüft am 06.09.2026.
Verwandte Anleitungen: VBA Kommentar · VBA Zeilenfortsetzung · VBA Dim · VBA Datentypen · VBA Debug.Print
