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

VBA Nothing in Excel — Referenzen freigeben, Is Nothing gegen = Nothing und wann es zählt

|

VBA Nothing in Excel — Referenzen freigeben, Is Nothing gegen = Nothing und wann es zählt

KurzfassungNothing ist der Zustand der leeren Referenz: eine Objektvariable, die auf kein Objekt zeigt. Testen Sie ihn mit If x Is Nothing — dem Operator Is, nie einem blanken =, denn Objekte lassen sich nicht mit = vergleichen. Set x = Nothing gibt die Referenz frei. Jede Objektvariable beginnt als Nothing, und eine zu verwenden, solange sie noch Nothing ist, ist die Quelle von Fehler 91, Object variable or With block variable not set.

Sub NothingBasics()
    Dim ws As Worksheet              ' startet als Nothing - zeigt auf kein Blatt
    Set ws = FindSheet("Data")       ' eine Funktion, die Nothing zurueckgeben kann

    If ws Is Nothing Then            ' Is, nicht = (ein blankes = kompiliert hier nicht)
        MsgBox "Sheet not found"
        Exit Sub
    End If

    ws.Range("A1").Value = 1
    Set ws = Nothing                 ' die Referenz freigeben
End Sub

Nothing ist der „Freigabe"-Schritt im Lebenszyklus eines Objekts: Sie erzeugen ein Objekt mit New, richten mit Set eine Variable darauf aus und lassen die Referenz mit Nothing fallen. Es ist zugleich der Anfangszustand jeder Objektvariablen — genau darum fliegt Ihnen ein nicht mit Set zugewiesenes Objekt um die Ohren.

Was Sie lernen

  • Das Denkmodell — Nothing ist ein leerer Zeiger, ein Etikett, das an keinem Objekt hängt
  • Warum Sie mit If x Is Nothing testen müssen und nie mit If x = Nothing
  • Die häufigste echte Verwendung — das Absichern eines Find oder einer Suche, die Nothing zurückgab
  • Wann Set x = Nothing wirklich zählt und wann es ein harmloses Ritual ist
  • Wie sich Nothing von Empty, Null und "" unterscheidet (sie sind nicht austauschbar)

Das Denkmodell: ein leerer Zeiger

Wenn eine Objektvariable ein Etikett ist, das auf ein Ding zeigt, dann ist Nothing dieses Etikett, das auf kein Ding zeigt. Es ist nicht null, keine leere Zeichenkette, nicht „leer" — das beschreibt Werte. Nothing ist der spezielle Zustand einer Referenz, an deren anderem Ende kein Objekt hängt.

Jede Objektvariable beginnt dort. In dem Moment, in dem Sie Dim ws As Worksheet schreiben, ist ws gleich Nothing; es bleibt Nothing, bis ein Set es auf ein echtes Blatt ausrichtet. Diese eine Tatsache erklärt Fehler 91: Verwenden Sie eine Objektvariable, bevor Sie sie mit Set zuweisen, dereferenzieren Sie NothingObject variable or With block variable not set (siehe Set). Nothing ist sowohl der Ort, an dem eine Referenz geboren wird, als auch der, an den sie geht, wenn Sie sie freigeben.

Mit Is Nothing testen, nie mit = Nothing

Das ist die Falle, in die jeder einmal tappt. Sie können eine Referenz nicht mit = auf Leere testen:

If ws = Nothing Then      ' FALSCH - kompiliert nicht / Typfehler
If ws Is Nothing Then     ' RICHTIG - Is vergleicht Identitaet, nicht Wert

= fragt „sind diese zwei Werte gleich?", und ein solcher Vergleich braucht einen Standardwert — deshalb funktioniert Range("A1") = 5, aber ws = Nothing nicht. Is stellt eine andere Frage: „zeigen diese zwei Etiketten auf dasselbe Objekt (oder auf keines)?" Auf Nothing zu testen, oder zu prüfen, ob zwei Variablen auf dasselbe Objekt verweisen, ist eine Identitätsfrage und nutzt daher Is. Um das Gegenteil zu testen, klammern Sie es: If Not ws Is Nothing Then.

Die häufigste echte Verwendung: ein Find absichern, das Nothing zurückgab

Der mit Abstand häufigste Ort, an dem Nothing in echten Makros auftaucht, ist das Ergebnis einer Suche. Range.Find gibt Nothing zurück, wenn es keine Übereinstimmung findet — und auf diesem Ergebnis nach .Row zu greifen ist ein glatter Fehler 91:

Dim hit As Range
Set hit = ws.Columns("A").Find(What:="Total", LookAt:=xlWhole)

If hit Is Nothing Then                ' der Schutz, der Fehler 91 verhindert
    MsgBox "No 'Total' row found"
    Exit Sub
End If

MsgBox "Found in row " & hit.Row      ' sicher - wir wissen, hit zeigt auf eine echte Zelle

Jede API, die „vielleicht keines findet" — Find, eine in einen Helfer verpackte Dictionary-Suche, eine Funktion, die ein Objekt zurückgibt —, kann Ihnen Nothing reichen. Die Gewohnheit, die Sie rettet: Wann immer eine Zuweisung Nothing ergeben könnte, testen Sie Is Nothing, bevor Sie das Ergebnis verwenden.

Wann Set x = Nothing wirklich zählt

Hier die ehrliche Antwort, die die meisten Tutorials auslassen: Bei einer gewöhnlichen lokalen Objektvariablen ist Set x = Nothing am Ende einer Sub meist überflüssig. VBA gibt lokale Objektreferenzen automatisch frei, wenn die Variable am Ende der Prozedur ihren Gültigkeitsbereich verlässt. Sie vorher auf Nothing zu setzen ist harmlos, aber Ritual, nicht Notwendigkeit.

Es zählt wirklich in drei Fällen:

  • Zirkuläre Referenzen. Hält Objekt A eine Referenz auf B und B eine zurück auf A, halten sie einander am Leben und werden nie zurückgewonnen, selbst nachdem die Sub endet. Ein ausdrückliches Set A.Partner = Nothing bricht den Kreis, sodass beide freigegeben werden können.
  • Objektvariablen auf Modulebene, globale oder Static. Diese überleben die Prozedur, die sie gefüllt hat, halten also ihr Objekt — und alle Excel-Ressourcen, die es sperrt — fest, bis Sie sie freigeben oder die Arbeitsmappe schließt. Geben Sie sie bewusst frei, wenn Sie fertig sind.
  • Externe Anwendungsobjekte. Eine Outlook.Application oder Word.Application, die Sie erzeugt haben, läuft im Hintergrund weiter, bis jede Referenz darauf Nothing ist. Geben Sie sie zügig frei, damit das andere Programm schließen kann.

Die Regel: Geben Sie dort bewusst frei, wo eine Referenz langlebig oder geteilt ist; pflanzen Sie Set x = Nothing nicht als Ritual auf jede lokale Variable.

Nothing ist nicht Empty, Null oder die leere Zeichenkette

Vier verschiedene „Leerheiten" bringen die Leute durcheinander, weil das Englische sie in einen Topf wirft. VBA hält sie strikt auseinander:

  • Nothing — eine Objektreferenz, die auf kein Objekt zeigt (If obj Is Nothing).
  • Empty — ein nicht initialisiertes Variant, dem nie etwas zugewiesen wurde (If IsEmpty(v)).
  • Null — ein Variant, das bewusst „keine gültigen Daten" hält, meist aus einem Datenbankfeld (If IsNull(v)).
  • "" — ein String der Länge null. Eine echte Zeichenkette, nur eben leer (If s = "").

Sie sind nicht austauschbar, und jede hat ihren eigenen Test. Is Nothing auf einem Variant oder IsNull auf einem Objekt tut nicht, was Sie erwarten. Nothing ist die für Objekte — reservieren Sie es für Referenzen.

Wie ExcelMaster hilft

Nothing steht an beiden Enden des Lebens eines Objekts, und jeder falsche Griff dabei scheitert auf eine Weise, die leicht zu übersehen ist: ein = Nothing, das nicht kompiliert, ein Find-Ergebnis, ohne Schutz verwendet, das 91 wirft, eine externe Anwendung, die weiterläuft, weil eine Referenz nie freigegeben wurde.

ExcelMaster schreibt den Schutz für Sie — If Not hit Is Nothing Then nach jeder Suche —, nutzt Is für jeden Identitätstest und gibt die langlebigen und externen Referenzen frei, die es wirklich brauchen, ohne Set x = Nothing über jede lokale Variable zu streuen. Sie beschreiben das Ergebnis; es kümmert sich um den Lebenszyklus. Sie behalten die Arbeitsmappe und den Code.

Häufig gestellte Fragen

Was bedeutet Nothing in VBA?

Nothing ist der Zustand der leeren Referenz einer Objektvariablen — die Variable zeigt auf kein Objekt. Jede Objektvariable startet als Nothing, bis ein Set ihr eines gibt, und Set x = Nothing versetzt sie zurück in diesen Zustand. Es gilt nur für Objekte, nicht für Werte.

Warum kann ich If x = Nothing nicht verwenden?

Weil = Werte vergleicht und eine Objektreferenz keinen Wert zum Vergleichen hat — If x = Nothing kompiliert also nicht oder löst einen Typfehler aus. Nutzen Sie stattdessen den Identitätsoperator: If x Is Nothing. Um das Gegenteil zu testen, schreiben Sie If Not x Is Nothing.

Muss ich Objekte am Ende eines Makros auf Nothing setzen?

Meist nicht. VBA gibt lokale Objektvariablen automatisch frei, wenn die Prozedur endet, Set x = Nothing auf einer gewöhnlichen lokalen Variablen ist also ein harmloses Ritual. Es zählt aber bei zirkulären Referenzen, bei Objektvariablen auf Modulebene oder globalen, die die Prozedur überleben, und bei externen Anwendungsobjekten wie Outlook.Application, die zügig freigegeben werden sollten.

Wie prüfe ich, ob ein Find oder eine Suche nichts zurückgab?

Testen Sie das Ergebnis mit Is Nothing, bevor Sie es verwenden: Set hit = ws.Columns("A").Find("Total") und dann If hit Is Nothing Then ... Exit Sub. Range.Find gibt Nothing zurück, wenn es keine Übereinstimmung gibt, und .Row auf einem Nothing-Ergebnis anzufassen löst Fehler 91 aus, Object variable or With block variable not set.

Was ist der Unterschied zwischen Nothing, Empty, Null und der leeren Zeichenkette?

Nothing ist eine Objektreferenz, die auf kein Objekt zeigt; Empty ist ein nicht initialisiertes Variant; Null ist ein Variant, das „keine gültigen Daten" hält, oft aus einer Datenbank; "" ist ein String der Länge null. Es sind eigenständige Zustände mit eigenständigen Tests (Is Nothing, IsEmpty, IsNull, = "") und nicht austauschbar.

Getestet in

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

Verwandte Anleitungen: VBA Set · VBA New · VBA Dim · VBA CreateObject · VBA With