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

VBA Dim in Excel — Variablen deklarieren, Option Explicit und der Tippfehler, der zur leeren Box wird

|

VBA Dim in Excel — Variablen deklarieren, Option Explicit und der Tippfehler, der zur leeren Box wird

TL;DRDim name As Type reserviert eine benannte Box und legt ihre Form fest, bevor Sie sie verwenden: Dim total As Long. Deklarieren ist in VBA optional — und genau das ist das Problem. Ohne Deklaration wird ein einziger vertippter Variablenname stillschweigend zu einer brandneuen, leeren Variant, Ihre Summe bleibt 0, und kein Fehler schlägt je an. Setzen Sie Option Explicit ganz an den Anfang jedes Moduls. Es zwingt Sie, jede Variable zu deklarieren, sodass aus einem Tippfehler ein Compilerfehler wird („Variable nicht definiert“) statt einer falschen Antwort. Es ist die wirkungsvollste Zeile der ganzen Sprache.

Option Explicit          ' <- setzen Sie dies an den Anfang JEDES Moduls

Sub Demo()
    Dim total As Long    ' eine Ganzzahl-Box mit dem Namen total reservieren
    Dim name As String   ' eine Text-Box mit dem Namen name reservieren

    total = 10 + 5
    name = "Invoice"
    Debug.Print name, total   ' -> Invoice      15
End Sub

Jedes Makro beginnt damit, den Dingen einen Namen zu geben, mit denen es arbeitet — einem Zeilenzähler, einem Arbeitsblatt, einer laufenden Summe. Dim ist das Werkzeug dafür. Es sieht nach Bürokratie aus, aber es wegzulassen (oder nachlässig zu handhaben) steckt hinter einer ganzen Kategorie von Bugs, die überhaupt keinen Fehler erzeugen — der schlimmsten Sorte, denn das Makro läuft bis zum Ende durch und reicht Ihnen selbstbewusst eine falsche Zahl.

Was Sie lernen

  • Was Dim tatsächlich tut — eine benannte Box reservieren und ihre Form festlegen
  • Warum Option Explicit stille Tippfehler-Bugs in laute Compilerfehler verwandelt
  • Die Falle Dim a, b As Long, die a zu einer Variant macht, nicht zu einem Long
  • Wann ein einfaches = nicht genügt und Sie Set brauchen (Objekte)
  • Warum der Ort der Deklaration entscheidet, wer die Variable sieht und wie lange sie lebt

Das mentale Modell: Dim reserviert eine beschriftete Box, bevor Sie sie füllen

Stellen Sie sich eine Variable als beschriftete Box im Speicher vor. Dim total As Long erledigt zwei Dinge auf einmal: Es reserviert eine Box und gibt ihr die Beschriftung total, und es legt die Form der Box auf Long fest (eine Ganzzahl). Von da an legt total = 15 einen Wert in diese Box, und der Name total liest ihn wieder aus.

Die Beschriftung ist wichtiger, als Anfänger erwarten — wegen dem, was VBA tut, wenn es einen Namen sieht, den es nicht kennt. Standardmäßig — ohne Option Explicit — ist VBAs Reaktion auf einen unbekannten Namen nicht „Fehler“. Sie lautet „ah, eine neue Variable“, und VBA legt Ihnen klammheimlich eine an, leer. Diese eine Design-Entscheidung ist die Quelle des verwirrendsten Bugs in VBA — und der nächste Abschnitt ist die Lösung.

Die Regel, die Sie vor dem schlimmsten VBA-Bug bewahrt: Option Explicit

Hier ist der Bug, in drei Zeilen:

Sub AddThemUp()
    total = 0
    total = totl + 10      ' Tippfehler: „totl“, nicht „total“
    Debug.Print total      ' -> 10, für immer — der Tippfehler schuf eine NEUE leere Box
End Sub

Sie meinten total, getippt haben Sie totl. Ohne Option Explicit beanstandet VBA das nicht. Es erfindet eine frische, leere Variant namens totl (Wert 0 / Empty), addiert 10 zu nichts, und Ihr echtes total sammelt nie etwas an. Kein roter Text, kein Meldungsfenster — nur ein falsches Ergebnis, das Ihnen vielleicht erst auffällt, wenn es in einem Bericht steht.

Option Explicit beendet diese ganze Klasse von Bugs. Als erste Zeile eines Moduls platziert, macht es die Deklaration zur Pflicht: Jede Variable muss vor der Verwendung in einem Dim (oder Private / Public) auftauchen. Jetzt kann der Tippfehler keine Phantom-Box mehr anlegen — es ist ein nicht deklarierter Name, also stoppt VBA zur Compilezeit:

Option Explicit

Sub AddThemUp()
    Dim total As Long
    total = 0
    total = totl + 10      ' Compilerfehler: Variable nicht definiert  (markiert „totl“)
End Sub

Der Fehler zeigt direkt auf den Tippfehler, bevor das Makro überhaupt läuft. Schalten Sie ihn überall standardmäßig ein: Extras → Optionen → Editor → „Variablendeklaration erforderlich“ fügt jedem neuen Modul automatisch Option Explicit hinzu (bei bestehenden Modulen ergänzen Sie es weiterhin von Hand). Betrachten Sie „Variable nicht definiert“ als Geschenk — gerade hat es Ihnen gratis einen Bug erspart.

Die Regel, die jedes Dim an einen Typ bindet: die Falle Dim a, b As Long

Das ist der Deklarationsfehler, den fast jeder einmal macht. Sie wollen drei Long-Zähler, also schreiben Sie:

Dim i, j, k As Long

Verständlicherweise erwarten Sie, dass i, j und k alle Long sind. Sind sie nicht. Nur k ist Long. i und j — die keine eigene As-Klausel haben — sind Variant. In VBA gilt der Typ nur für die Variable, an der er direkt hängt; es gibt keine Regel „verteile den Typ über die ganze Liste“.

' FALSCH — i und j sind Variant, nur k ist Long
Dim i, j, k As Long

' RICHTIG — jede Variable bekommt ihren eigenen Typ
Dim i As Long, j As Long, k As Long

' Am klarsten — eine pro Zeile
Dim i As Long
Dim j As Long
Dim k As Long

Der Fehlermodus ist subtil: Der Code läuft trotzdem, denn eine Variant hält eine Zahl problemlos. Sie verlieren die Typsicherheit und die Geschwindigkeit, die Sie zu haben glaubten, und der Bug zeigt sich erst später, wenn eine dieser „Long“-Variablen klammheimlich Text oder einen riesigen Wert annimmt, den sie nicht dürfte. Geben Sie jeder Variable ihr eigenes As Type.

Die Regel für Objekte: ein einfaches = genügt nicht, Sie brauchen Set

Variablen, die einen Wert halten — eine Zahl, etwas Text, ein Datum — werden mit = zugewiesen. Variablen, die ein Objekt halten — ein Worksheet, ein Range, ein Workbook — müssen mit Set zugewiesen werden. Set zu vergessen ist der andere klassische Anfängerfehler.

Dim ws As Worksheet
Set ws = ThisWorkbook.Worksheets("Data")   ' Set ist bei Objekten Pflicht
Debug.Print ws.Range("A1").Value

Dim rng As Range
Set rng = ws.Range("A1:A10")               ' wieder Set

Lassen Sie Set weg, weist VBA das Objekt nicht zu — stattdessen versucht es, den Standardwert des Objekts zu lesen, und Sie bekommen „Objektvariable oder With-Blockvariable nicht festgelegt“ (Fehler 91) oder „Objekt erforderlich“ (Fehler 424). Die Regel ist mechanisch und einprägenswert: Werttypen nutzen =, Objekttypen nutzen Set. Verweist ein Typname auf ein Ding in Excels Objektmodell (Worksheet, Range, Chart, Workbook), braucht er Set.

Wo Sie Dim schreiben, entscheidet über Sichtbarkeit und Lebensdauer

Der Ort, an dem Sie Dim schreiben, ist nicht kosmetisch — er entscheidet, wer die Variable sehen kann und wie lange sie überlebt:

  • Innerhalb einer Sub oder Function → die Variable ist lokal. Sie entsteht, wenn die Prozedur startet, und ist weg, wenn sie endet. Nichts von außen kann sie sehen.
  • Am Anfang eines Moduls, oberhalb der ersten Prozedur → sie ist für jede Prozedur in diesem Modul sichtbar. Nutzen Sie dort Private, um sie auf das Modul zu beschränken.
  • Public am Anfang eines Moduls → sie ist global, sichtbar für das gesamte Projekt. Mächtig, aber leicht zu missbrauchen; ein Wert, den alles von überall ändern kann, ist schwer zu durchschauen.

Als Faustregel deklarieren Sie Variablen so lokal wie irgend möglich — direkt in der Prozedur, die sie verwendet. Greifen Sie nur dann zu Modulebene oder Public, wenn ein Wert wirklich geteilt werden muss. Sichtbarkeit ist eigentlich ein Thema für sich; wenn Sie Werte zwischen Prozeduren übergeben, sehen Sie in VBA Sub und VBA ByRef vs. ByVal, wie Argumente fließen.

Wie ExcelMaster hilft

Dim, Option Explicit und disziplinierte Sichtbarkeit trennen ein Makro, das ein Jahr voller Änderungen übersteht, von einem, das verrottet. Sie sind zugleich Reibung — die sorgfältigen Deklarationen, die Sie schreiben, bevor Sie zu dem Teil kommen, der Sie eigentlich interessiert.

ExcelMaster lässt Sie direkt zum Ergebnis springen. Beschreiben Sie die Aufgabe in einfachem Deutsch — „Summiere im Blatt Orders Spalte D, wo der Status Paid ist, gruppiert nach Monat“ — und es schreibt und führt die Logik für Sie aus, deklariert die richtigen Variablen und Typen auf die robuste Weise, statt Sie an Option Explicit denken zu lassen. Wenn Sie doch ein handgeschriebenes Makro nach Zeitplan brauchen, deklarieren Sie die Dinge weiterhin selbst mit Dim. Für die alltägliche „Erledige das einfach mit den heutigen Daten“-Aufgabe schlägt das Beschreiben des Ergebnisses das fehlerfreie Deklarieren von Hand.

Häufig gestellte Fragen

Muss ich Variablen in VBA deklarieren?

Technisch nein — VBA lässt Sie eine nie deklarierte Variable verwenden und behandelt sie als Variant. In der Praxis sollten Sie alles deklarieren, denn nicht deklarierte Variablen lassen einen einzigen Tippfehler stillschweigend eine neue leere Box anlegen und liefern eine falsche Antwort ohne jeden Fehler. Setzen Sie Option Explicit an den Anfang jedes Moduls, um die Deklaration zur Pflicht zu machen.

Was bedeutet Dim in VBA?

Dim ist die Kurzform von „dimension“ — der Begriff stammt daher, dass man im frühen BASIC die Dimensionen eines Arrays reservierte. Heute heißt es schlicht „eine Variable deklarieren“: einen benannten Platz im Speicher reservieren und mit As Type festlegen, welche Art Wert er hält, z. B. Dim count As Long.

Macht Dim a, b As Long sowohl a als auch b zu Long?

Nein. Nur b ist Long; a ist eine Variant, weil die As-Klausel nur für die Variable gilt, an der sie direkt hängt. Damit beide Long werden, schreiben Sie Dim a As Long, b As Long — geben Sie jeder Variable ihr eigenes As Type.

Was ist Option Explicit und wohin gehört es?

Option Explicit zwingt dazu, jede Variable vor der Verwendung zu deklarieren. Setzen Sie es als erste Zeile jedes Moduls, oberhalb aller Prozeduren. Es verwandelt stille Bugs durch „nicht deklarierte Tippfehler“ in einen klaren Compilerfehler „Variable nicht definiert“. Aktivieren Sie Extras → Optionen → Editor → Variablendeklaration erforderlich, um es neuen Modulen automatisch hinzuzufügen.

Wann verwende ich Set statt = bei einer Dim-Zuweisung?

Verwenden Sie Set, wenn die Variable ein Objekt aus Excels Objektmodell hält — ein Worksheet, Range, Workbook, Chart und so weiter: Set ws = ActiveSheet. Nutzen Sie ein einfaches = für Werte — Zahlen, Text, Datumsangaben, Booleans. Set bei einem Objekt zu vergessen ergibt „Objektvariable oder With-Blockvariable nicht festgelegt“ (Fehler 91).

Getestet in

Getestet in: Excel 365 (Windows 11), VBA 7.1 — zuletzt geprüft am 31.07.2026.

Verwandte Anleitungen: VBA Datentypen · VBA Const · VBA Sub · VBA ByRef vs. ByVal · VBA Range