🚀The world's best VBA AI has evolved. ExcelMaster is now an autonomous Agent.Read more →
Back to Blog

VBA Option Explicit in Excel — aus einem stillen Tippfehler einen lauten Compile error machen

|

VBA Option Explicit in Excel — aus einem stillen Tippfehler einen lauten Compile error machen

TL;DR — Setzen Sie Option Explicit ganz 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 wie totalSaies kein Fehler — VBA legt still eine neue leere Variable an, Ihre Summe kommt als 0 zurü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