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

VBA Blatt hinzufügen in Excel — ein Arbeitsblatt erstellen und richtig festhalten

|

VBA Blatt hinzufügen in Excel — ein Arbeitsblatt erstellen und richtig festhalten

KurzfassungWorksheets.Add gibt das Blatt zurück, das es gerade erstellt hat. Fangen Sie diesen Rückgabewert ab — Set ws = Worksheets.Add(...) — und Sie müssen nie raten, welches Blatt das neue ist. Die zwei Dinge, über die jeder stolpert, sind Position und Name: Ein blankes Worksheets.Add legt das Blatt links neben das aktive Blatt (nicht ans Ende), und Sie können den Namen nicht im Add-Aufruf übergeben — Sie setzen .Name danach, wo ein doppelter, leerer oder zu langer Name den Laufzeitfehler 1004 wirft.

Sub AddMonthSheet()
    Dim ws As Worksheet
    Set ws = ThisWorkbook.Worksheets.Add(After:=Worksheets(Worksheets.Count))
    ws.Name = "Sep 2026"          ' <= 31 Zeichen, eindeutig, kein : \ / ? * [ ]
End Sub

Worksheets.Add ist die Code-Fassung von Start ▸ Einfügen ▸ Blatt einfügen und des kleinen + neben den Registern. Es ist eine der ersten Handlungen eines Bericht-Makros, und es scheitert jedes Mal an denselben zwei Stellen — das Blatt taucht irgendwo auf, wo Sie es nicht erwartet haben, oder die Umbenennungszeile fliegt Ihnen um die Ohren. Beide Probleme verschwinden in dem Moment, in dem Sie Add als Fabrik behandeln, die Ihnen das fertige Blatt reicht, statt als Befehl, der Sie es selbst suchen lässt.

Was Sie lernen

  • Das Denkmodell — Add gibt das neue Blatt zurück, fangen Sie es also ab und hören Sie auf, ActiveSheet zu nutzen
  • Die eine Regel, die die meisten Fehler verhindert — den Rückgabewert einer Worksheet-Variablen zuweisen
  • Warum ein blankes Add das Blatt links platziert, und wie Before und After das beheben
  • Warum Sie das Blatt nicht innerhalb von Add benennen können, und die Regeln, die .Name 1004 werfen lassen
  • Wie Sie ein Blatt nur hinzufügen, wenn es noch nicht existiert

Das Denkmodell: Add reicht Ihnen das Blatt

Worksheets.Add ist kein Befehl nach dem Prinzip abschicken-und-vergessen. Es ist eine Funktion, die ein Blatt erstellt und eine Referenz darauf zurückgibt. Der mit Abstand häufigste Fehler ist, diese Referenz wegzuwerfen:

Worksheets.Add                    ' das neue Blatt wird erstellt... und dann verloren
Worksheets(Worksheets.Count).Name = "Data"   ' Raten, wohin es ging

Die zweite Zeile ist geraten. Sie nimmt an, das neue Blatt sei das letzte, was es standardmäßig nicht ist, und benennt so das falsche Register um. Alles, was danach kommt — Überschriften schreiben, formatieren, Formeln ergänzen —, zielt dann auf ein per Zufall gewähltes Blatt. Fangen Sie stattdessen den Rückgabewert ab, und das Raten ist für immer vorbei:

Dim ws As Worksheet
Set ws = Worksheets.Add
ws.Name = "Data"                  ' das ist eindeutig das Blatt, das Sie gerade erstellt haben

Sobald ws das echte Objekt hält, spielt die Position für die Korrektheit keine Rolle mehr — Sie können das Blatt hinlegen, wohin Sie wollen, und Ihr Code spricht weiterhin das richtige an.

Die wichtigste Regel: den Rückgabewert zuweisen

Jede verlässliche Routine zum Blatt-Hinzufügen beginnt gleich: Set ws = Worksheets.Add(...). Das ist die Regel, die eine ganze Kategorie von Fehlern beseitigt, denn die beiden brüchigen Alternativen versagen beide unter ganz gewöhnlichen Bedingungen:

  • ActiveSheet nach Add zeigt meistens auf das neue Blatt — aber nicht, wenn ein Ereignis, ein Calculate oder eine andere Zeile den Fokus zuvor verschoben hat. Es ist eine Konvention, keine Garantie.
  • Sheets(Sheets.Count) nimmt an, das neue Blatt sei das letzte, was nur stimmt, wenn Sie es dort hinzugefügt haben.

Der Rückgabewert ist die einzige Referenz, die immer sofort korrekt ist, ganz gleich, wo das Blatt gelandet ist oder was als Nächstes läuft. Behandeln Sie „ein Blatt hinzufügen" und „das Blatt festhalten" als einen einzigen, unteilbaren Schritt.

Worksheets.Add nimmt die Argumente Before:= und After:= — ein Blatt, vor oder hinter dem eingefügt wird. Übergeben Sie höchstens eines. Mit keinem von beiden fügt Excel das neue Blatt direkt vor dem aktiven Blatt ein, was beim ersten Mal fast jeden überrascht: Man erwartet „das Ende", und stattdessen erscheint das Register mitten in der Arbeitsmappe.

Um ans Ende anzuhängen — die Position, die die meisten Makros tatsächlich wollen —, verankern Sie mit After am letzten Blatt:

Set ws = Worksheets.Add(After:=Worksheets(Worksheets.Count))   ' immer zuletzt
Set ws = Worksheets.Add(Before:=Worksheets(1))                 ' immer zuerst

Worksheets(Worksheets.Count) ist die idiomatische Wendung für „das letzte Arbeitsblatt". Beachten Sie, dass es Arbeitsblätter zählt, nicht alle Blätter — enthält die Arbeitsmappe auch Diagrammblätter, unterscheiden sich Sheets.Count und Worksheets.Count. Im Zweifel positionieren Sie ausdrücklich; verlassen Sie sich nie auf den Standard „links vom aktiven" in Code, den andere lesen werden.

Beim Benennen stürzt Add ab

Add hat kein Name-Argument. Sie erstellen das Blatt und setzen dann .Name auf dem Objekt, das Sie abgefangen haben. In diesem zweiten Schritt wohnt der Laufzeitfehler 1004, denn Excel setzt strenge Regeln für Blattnamen durch — und es sind dieselben Regeln, ob Sie ein brandneues Blatt benennen oder ein altes umbenennen:

  • Höchstens 31 Zeichen
  • Muss eindeutig sein innerhalb der Arbeitsmappe (ohne Groß-/Kleinschreibung) — ein Duplikat ist der Absturz Nummer eins
  • Darf nicht leer sein
  • Darf nicht enthalten : \ / ? * [ ]

Verletzen Sie eine davon, wirft .Name = ... den Fehler 1004. Der häufigste Auslöser ist das erneute Ausführen eines Makros, das "Data" bereits einmal erstellt hat — der zweite Lauf kollidiert. Weil die Regeln für Erstellen und Umbenennen identisch sind, lohnt es sich, den Namen an einer Stelle abzusichern:

Function SafeName(nm As String) As String
    nm = Left$(nm, 31)
    Dim bad As Variant, ch As Variant
    For Each ch In Array(":", "\", "/", "?", "*", "[", "]")
        nm = Replace(nm, ch, "-")
    Next ch
    SafeName = nm
End Function

Das erledigt Länge und unzulässige Zeichen; die Eindeutigkeit erledigen Sie, indem Sie zuerst prüfen — das ist der nächste Abschnitt.

Nur hinzufügen, wenn es noch nicht existiert

Es gibt kein eingebautes Exists für Blätter, also müssen Sie die Kollision beim erneuten Lauf selbst verhindern. Prüfen Sie die Sammlung vor dem Hinzufügen nach dem Namen und verwenden Sie das Blatt wieder, wenn es schon da ist:

Function GetOrAddSheet(nm As String) As Worksheet
    Dim ws As Worksheet
    For Each ws In ThisWorkbook.Worksheets
        If StrComp(ws.Name, nm, vbTextCompare) = 0 Then
            Set GetOrAddSheet = ws          ' das bestehende wiederverwenden
            Exit Function
        End If
    Next ws
    Set GetOrAddSheet = ThisWorkbook.Worksheets.Add(After:=Worksheets(Worksheets.Count))
    GetOrAddSheet.Name = nm                 ' frei benennbar - wir wissen, es ist unbenutzt
End Function

Das ist das Muster, das ein Blatt-Hinzufügen-Makro idempotent macht — gefahrlos zweimal ausführbar — statt eines, das beim ersten Mal funktioniert und danach für immer 1004 wirft. Die Faustregel: Rufen Sie Add und .Name nie blind in einer Routine auf, die mehr als einmal laufen könnte; schlagen Sie den Namen zuerst nach und verwenden Sie wieder oder erstellen neu.

Wie ExcelMaster hilft

Ein Blatt hinzuzufügen sieht nach einer Zeile aus und verbirgt drei Entscheidungen — den Rückgabewert abfangen, eine Position wählen und einen zulässigen, eindeutigen Namen erzeugen —, und jede davon falsch zu treffen scheitert entweder still (falsches Register umbenannt) oder laut (Fehler 1004 beim zweiten Lauf).

ExcelMaster lässt Sie sagen, was Sie wollen — „füge am Ende ein Monatsblatt hinzu, benannt nach dem aktuellen Monat, und verwende es wieder, falls es schon da ist" — und schreibt das Set ws = Worksheets.Add(After:=...)-Abfangen, hängt an der richtigen Stelle an, bereinigt den Namen gegen die Regeln zu 31 Zeichen und unzulässigen Zeichen und prüft zuerst die Sammlung, sodass ein zweiter Lauf das Blatt wiederverwendet, statt abzustürzen. Sie behalten die Arbeitsmappe und den Code.

Häufig gestellte Fragen

Wie füge ich in VBA ein Blatt hinzu und benenne es?

Fangen Sie den Rückgabewert ab und setzen .Name darauf: Set ws = Worksheets.Add(After:=Worksheets(Worksheets.Count)), dann ws.Name = "Data". Add selbst hat kein Name-Argument. Der Name muss höchstens 31 Zeichen lang, in der Arbeitsmappe eindeutig, nicht leer und frei von : \ / ? * [ ] sein, sonst wirft .Name den Laufzeitfehler 1004.

Warum erscheint mein neues Blatt an der falschen Position?

Weil ein blankes Worksheets.Add das Blatt direkt vor dem aktiven Blatt einfügt, nicht am Ende. Steuern Sie es mit Before:= oder After:=. Um ans Ende anzuhängen, nutzen Sie Worksheets.Add(After:=Worksheets(Worksheets.Count)); um es an den Anfang zu setzen, Worksheets.Add(Before:=Worksheets(1)).

Warum bekomme ich beim Hinzufügen oder Benennen eines Blatts Fehler 1004?

Fast immer ein Verstoß gegen eine Namensregel, und meist ein Duplikat. Blattnamen müssen eindeutig sein, das erneute Ausführen eines Makros, das "Data" schon erstellt hat, kollidiert also beim zweiten Lauf. Namen müssen außerdem höchstens 31 Zeichen lang, nicht leer und frei von : \ / ? * [ ] sein. Prüfen Sie die Sammlung vor dem Hinzufügen nach dem Namen und bereinigen Sie die Zeichenkette zuerst.

Wie füge ich ein Blatt nur hinzu, wenn es noch nicht existiert?

Es gibt keine Exists-Methode, durchlaufen Sie also die Worksheets-Sammlung und vergleichen die Namen mit StrComp(ws.Name, nm, vbTextCompare) = 0. Wird eine Übereinstimmung gefunden, verwenden Sie dieses Blatt wieder; andernfalls rufen Sie Add auf und benennen es. Verpacken Sie das in eine GetOrAddSheet-Funktion, wird das Makro gefahrlos wiederholt ausführbar.

Wie füge ich ein Blatt ganz ans Ende der Arbeitsmappe hinzu?

Verankern Sie am letzten Arbeitsblatt: Worksheets.Add(After:=Worksheets(Worksheets.Count)). Worksheets(Worksheets.Count) ist das letzte Arbeitsblatt, das Einfügen danach hängt also ans Ende an. Nutzen Sie Sheets.Count statt Worksheets.Count nur, wenn Sie bewusst auch Diagrammblätter mitzählen wollen.

Getestet in

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

Verwandte Anleitungen: VBA Blatt kopieren · VBA Blatt löschen · VBA Worksheets · VBA Worksheet · VBA ThisWorkbook