Kurzfassung — In VBA weisen Sie ein Objekt mit
Setzu, nicht mit einem schlichten=. Eine Objektvariable ist eine Referenz — ein Etikett, das auf ein lebendes Objekt zeigt —, also richtetSet ws = Worksheets("Data")das Etikett auf das Blatt aus. Vergessen Sie dasSet, wirft VBA Fehler 91, Object variable or With block variable not set. Verwenden SieSetauf etwas, das kein Objekt ist, bekommen Sie Fehler 424, Object required. Werte (Integer,String,Double) werden mit=kopiert; auf Objekte zeigen Sie mitSet.
Sub ObjectsNeedSet()
Dim ws As Worksheet
Set ws = ThisWorkbook.Worksheets("Data") ' Set = das Etikett auf das Blatt ausrichten
ws.Range("A1").Value = 100 ' jetzt verweist ws auf etwas - das klappt
Dim total As Double
total = ws.Range("A1").Value ' Werte nutzen =, kein Set
End Sub
Set ist der Schlussstein im Lebenszyklus eines Objekts: Sie erzeugen ein Objekt mit
New, Sie richten mit Set eine Variable darauf aus, und Sie geben es mit
Nothing frei. Machen Sie Set falsch, treffen Sie die zwei Fehler, denen jeder
VBA-Entwickler zuerst begegnet — 91 und 424 —, weshalb es sich lohnt zu verstehen, warum Objekte es
brauchen.
Was Sie lernen
- Das Denkmodell — eine Objektvariable ist eine Referenz (ein Etikett), keine Schachtel, die eine Kopie enthält
- Was
Setbraucht (Range,Worksheet,Workbook,Dictionary) und was nicht (Integer,String) - Der Fehler Nummer eins — Fehler 91, Object variable or With block variable not set, durch ein fehlendes
Set - Fehler 424, Object required, und wie er sich von 91 unterscheidet
- Warum
Set b = azwei Namen für dasselbe lebende Objekt schafft, keine Kopie
Das Denkmodell: eine Referenz, keine Schachtel
Eine Wertvariable ist eine Schachtel. Dim n As Long: n = 5 legt die Zahl 5 in n. Kopieren Sie sie mit
m = n, bekommt m seine eigene 5; ändern Sie m, bleibt n unberührt. Einfach.
Eine Objektvariable ist keine Schachtel — sie ist ein Etikett. Dim ws As Worksheet erzeugt ein leeres
Etikett, das gerade auf gar kein Blatt zeigt. Set ws = Worksheets("Data") kopiert das Arbeitsblatt nicht
in ws; es richtet das Etikett auf das vorhandene Blatt aus. Genau dafür gibt es Set: Ein Objekt
zuzuweisen ist ein Akt des Zeigens, und VBA lässt Sie das ausdrücklich sagen.
Dim ws As Worksheet
ws = Worksheets("Data") ' FALSCH - kein Set - Laufzeitfehler 91
Set ws = Worksheets("Data") ' RICHTIG - das Etikett zeigt jetzt auf das Blatt
Merken Sie sich einen Satz, und alles andere ergibt sich: Werte kopieren Sie mit =; auf Objekte zeigen
Sie mit Set. Die zwei Laufzeitfehler unten sind beide nur VBAs Art, Ihnen zu sagen, dass es ein
Etikett nicht sauber ausrichten konnte.
Der Fehler Nummer eins: Fehler 91
91 ist der Fehler, der die Leute zur Suche treibt, unter seinem vollen Namen: Object variable or With
block variable not set. Er bedeutet, dass Sie eine Objektvariable verwendet haben, die gerade auf nichts
zeigt. Zwei Situationen lösen ihn aus, und beide laufen auf ein fehlendes Set hinaus.
Erstens: Sie haben das Objekt deklariert, aber nie mit Set zugewiesen, es ist also noch Nothing, und
dann haben Sie es verwendet:
Dim ws As Worksheet
ws.Range("A1").Value = 1 ' Fehler 91 - ws wurde nie mit Set zugewiesen, zeigt auf nichts
Zweitens — der heimtückische Fall —: Sie wollten das Blatt zuweisen, haben aber das Set vergessen:
Dim ws As Worksheet
ws = ThisWorkbook.Worksheets("Data") ' Fehler 91 - ein blankes = kann kein Objekt-Etikett ausrichten
Die Lösung ist in beiden Fällen dasselbe Wort: Set ws = ThisWorkbook.Worksheets("Data"). Wann immer Sie
Object variable or With block variable not set sehen, lautet die erste Frage stets: Habe ich dieses
Objekt mit Set zugewiesen, und gab es das, worauf ich es mit Set ausgerichtet habe, überhaupt? (Ein
Find oder eine Suche, die Nothing zurückgibt, ist die andere klassische Quelle
— die Variable ist gesetzt, nämlich auf Nothing, und Sie haben sie trotzdem verwendet.)
Fehler 424: Object required
424, Object required, ist das Spiegelbild von 91. Wo 91 heißt „Sie haben ein leeres Objekt-Fach
verwendet", heißt 424 „Sie haben Set oder Objekt-Syntax auf etwas angewandt, das gar kein Objekt ist":
Dim n As Long
Set n = 5 ' Fehler 424 - 5 ist ein Wert, Set will ein Objekt
Set n = Range("A1").Value ' Fehler 424 - .Value ist eine Zahl, kein Objekt
Set auf der linken Seite verlangt ein Objekt auf der rechten. Geben Sie ihm eine Zahl, eine Zeichenkette
oder eine Eigenschaft, die einen Wert zurückgibt, sagt VBA Object required. Sie sehen 424 auch, wenn Sie
Objekt-Syntax auf eine schlichte Variable anwenden — x.Cells(1, 1), wobei x ein String ist, oder ein
vertippter Variablenname, den VBA still als leeres Variant behandelt. Die Faustregel: 91 heißt „setz
es zuerst"; 424 heißt „das ist kein Objekt, lass das Set weg (oder korrigiere die rechte Seite)".
Set schafft einen Alias, keine Kopie
Weil Set zeigt statt kopiert, können zwei Objektvariablen am Ende auf dasselbe lebende Objekt zeigen —
und wer durch die eine schreibt, ändert, was die andere sieht:
Dim a As Range, b As Range
Set a = Range("A1:B2")
Set b = a ' b zeigt auf DENSELBEN Range wie a - keine Kopie
b.ClearContents ' das leert auch a, denn a und b sind ein Range
Vergleichen Sie das mit Werten, wo eine Kopie wirklich eine Kopie ist:
Dim x As Long, y As Long
x = 5: y = x ' y bekommt seine eigene 5
y = 9 ' x ist immer noch 5 - unabhaengige Schachteln
Dieses Aliasing ist kein Fehler; es ist der Sinn von Referenzen, und deshalb ist das Herumreichen von
Objekten billig (Sie reichen das Etikett weiter, nie das ganze Blatt). Aber es bedeutet eben, dass „ich
habe den Range in eine andere Variable kopiert und sie bearbeitet" still das Original bearbeitet. Um die
Daten zu duplizieren, kopieren Sie die Zellen (a.Copy), nicht die Referenz.
Set gegen Let
VBA hat tatsächlich ein passendes Schlüsselwort für Werte: Let. Let n = 5 ist dasselbe wie n = 5 —
das Let ist optional und niemand schreibt es mehr, also liest sich eine Wertzuweisung als blankes =.
Für Objekte gibt es keine solche Abkürzung: Set ist Pflicht und darf nie wegfallen. Genau diese
Asymmetrie macht den Fehler des fehlenden Set so leicht — jede andere Zuweisung in Ihrem Makro ist ein
blankes =, und Objekte sind die eine Stelle, an der das nicht genügt.
Wie ExcelMaster hilft
Die ganze Set-Geschichte ist eine Entscheidung, die bei jeder Zuweisung fällt — ist das ein Wert, den
ich kopiere, oder ein Objekt, auf das ich zeige? —, und macht man sie falsch, scheitert es laut mit 91
oder 424, oder leise mit einem Alias, den Sie nicht erwartet haben.
ExcelMaster lässt Sie die Aufgabe
beschreiben — „nimm das Blatt Data, finde die letzte Zeile, schreib die Summe" — und schreibt die
Objektreferenzen mit Set, wo sie hingehören, deklariert jede Variable mit dem richtigen Typ und sichert
eine Suche, die Nothing zurückgeben könnte, ab, bevor sie das Ergebnis anfasst, sodass Fehler 91 Sie nie
erreicht. Sie behalten die Arbeitsmappe und den Code.
Häufig gestellte Fragen
Was macht Set in VBA?
Set weist einer Objektvariablen eine Referenz zu — es richtet die Variable auf ein lebendes Objekt aus,
etwa einen Range, ein Worksheet, ein Workbook oder ein Dictionary. Anders als ein blankes =, das
einen Wert kopiert, kopiert Set das Objekt nicht; es lässt die Variable auf das vorhandene verweisen.
Objekte brauchen Set; Werte (Integer, String, Double) nicht.
Warum erhalte ich den Fehler Object variable or With block variable not set?
Das ist Laufzeitfehler 91, und er bedeutet, dass Sie eine Objektvariable verwendet haben, die auf nichts
zeigt. Meist haben Sie sie mit Dim deklariert, aber nie mit Set zugewiesen, oder Sie haben ein blankes
= statt Set geschrieben (ein blankes = kann keine Objektvariable ausrichten), oder das, was Sie
zugewiesen haben — etwa ein Find-Ergebnis — gab Nothing zurück. Fügen Sie das
Set hinzu und prüfen Sie, dass das zugewiesene Objekt tatsächlich existiert.
Was ist der Unterschied zwischen Fehler 91 und Fehler 424?
Fehler 91, Object variable or With block variable not set, bedeutet, dass Sie eine Objektvariable
verwendet haben, die gerade Nothing ist — die Lösung ist, sie zuerst mit Set zuzuweisen. Fehler 424,
Object required, bedeutet, dass Sie Set (oder Objekt-Syntax) auf etwas angewandt haben, das kein
Objekt ist — etwa Set n = 5 —, die Lösung ist also, das Set zu entfernen oder ein echtes Objekt auf
die rechte Seite zu setzen.
Brauche ich Set für einen String oder ein Integer?
Nein. String, Integer, Long, Double, Boolean, Date und andere Werttypen werden mit einem
blanken = zugewiesen, weil sie kopiert und nicht referenziert werden. Set ist nur für Objekttypen da.
Set auf einem Wert löst Fehler 424 aus, Object required.
Kopiert Set das Objekt?
Nein — Set richtet die Variable auf das vorhandene Objekt aus. Set b = a gibt Ihnen zwei Variablen, die
auf dasselbe lebende Objekt verweisen, eine Änderung durch b ist also durch a sichtbar. Um die
zugrunde liegenden Daten zu duplizieren (bei einem Range etwa), kopieren Sie die Zellen mit a.Copy, nicht
die Referenz.
Getestet in
Getestet in: Excel 365 (Windows 11), VBA 7.1 — zuletzt geprüft am 19.09.2026.
Verwandte Anleitungen: VBA New · VBA Nothing · VBA Dim · VBA CreateObject · VBA With
