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

VBA Rename Sheet in Excel — was eine Umbenennung aktualisiert und was sie stillschweigend bricht

|

VBA Rename Sheet in Excel — was eine Umbenennung aktualisiert und was sie stillschweigend bricht

Kurzfassung — ws.Name = "Sales 2026" benennt ein Blatt um. Die Zeile ist trivial, die Folgen sind es nicht. Eine Umbenennung ist ein Refactoring: Excel schreibt jeden Bezug um, den es parsen kann — Zellformeln, definierte Namen, Diagrammdatenreihen, Gültigkeitslisten — und lässt jeden Bezug, der nur Text ist, auf einen Namen zeigen, den es nicht mehr gibt: INDIRECT-Zeichenketten, Hyperlink-Ziele und Ihre eigenen Makros, in denen Worksheets("Sales") steht. Bevor Sie umbenennen, sollten Sie wissen, von welcher der beiden Sorten Ihre Arbeitsmappe abhängt. Bauen Sie Namen über eine Bereinigungsfunktion, nie direkt aus einer Zelle, und verankern Sie Ihren eigenen Code am CodeName, den keine Umbenennung antasten kann.

Sub RenameMonthSheet()
    Dim ws As Worksheet
    Set ws = ThisWorkbook.Worksheets("Template")
    ws.Name = "Report " & Format(Date, "yyyy-mm")   ' nie ein rohes Datum: 9/30/2026 enthaelt /
End Sub

Dies ist der erste Teil einer dreiteiligen Reihe über die Identität eines Blatts. Der Registername ist eine Beschriftung, die dem Benutzer gehört. Umbenennen ändert diese Beschriftung, Ausblenden nimmt das Register vom Bildschirm, ohne das Blatt unerreichbar zu machen, und prüfen, ob ein Blatt existiert fragt, ob eine Beschriftung vergeben ist, bevor Sie sich darauf verlassen. Code, der Benutzer überleben muss, verankert sich an etwas, das diese nicht ändern können; Code, der einen Namen verwenden muss, prüft ihn zuerst.

Was Sie lernen

  • Das Denkmodell: Eine Umbenennung ist ein Refactoring mit zwei Arten von Bezügen
  • Was Excel für Sie aktualisiert und was es stillschweigend kaputt zurücklässt
  • Die Namensregeln hinter Fehler 1004 und eine Bereinigungsfunktion, die sie einhält
  • Warum ein Blattname aus einer Datumszelle in einem Land funktioniert und im anderen abstürzt
  • In großer Zahl umbenennen und zwei Namen ohne Kollision tauschen
  • Einen Blattnamen zurücklesen, in VBA und in einer Formel

Das Denkmodell: Eine Umbenennung ist ein Refactoring

Jeder Bezug auf ein Blatt gehört zu einer von zwei Sorten. Ein geparster Bezug ist etwas, das Excel als Zeiger versteht — =Sales!B4 in einer Zelle, ein definierter Name, der sich auf Sales!$A$1:$A$50 bezieht, eine Diagrammdatenreihe, eine Datenüberprüfungsliste. Excel speichert diese als Zeiger auf das Blatt, und wenn sich der Name ändert, schreibt es den Text für Sie um: Aus =Sales!B4 wird ='Sales 2026'!B4, mit Hochkommas wegen des Leerzeichens.

Ein Text-Bezug ist eine Zeichenkette, die zufällig den Namen buchstabiert. Excel ahnt nicht, dass sie irgendwohin zeigt, also lässt eine Umbenennung sie genau so, wie sie war — und nun zeigt sie ins Leere:

Bezug Sorte Nach einer Umbenennung
=Sales!B4 in einer Zelle geparst automatisch aktualisiert
Definierte Namen, Diagrammdatenreihen, Gültigkeitslisten, bedingte Formate geparst automatisch aktualisiert
Formeln in anderen Arbeitsmappen, die geöffnet sind geparst automatisch aktualisiert
=INDIRECT("Sales!B4") Text #REF!
=HYPERLINK("#Sales!A1", "Go") und eingefügte Hyperlinks Text Link führt ins Leere
Worksheets("Sales") in VBA Text Laufzeitfehler 9
Verknüpfungen aus Arbeitsmappen, die während der Umbenennung geschlossen sind gespeicherter Pfad brechen beim nächsten Aktualisieren

Diese Tabelle ist der ganze Artikel im Kleinformat. Die Umbenennung selbst scheitert nie stillschweigend; ihre Text-Bezüge schon.

Ein Blatt umbenennen und seinen Namen zurücklesen

Die Mechanik ist eine einzige Eigenschaft, lesend und schreibend:

Dim ws As Worksheet
Set ws = ThisWorkbook.Worksheets("Sales")

Debug.Print ws.Name              ' lesen: "Sales"
ws.Name = "Sales 2026"           ' schreiben: das Register aendert sich sofort
Debug.Print ActiveSheet.Name     ' der Name des gerade aktiven Blatts

Halten Sie das Blatt in einer Variablen, bevor Sie es umbenennen, wie oben. Sobald sich der Name ändert, findet Worksheets("Sales") es nicht mehr, doch die Variable zeigt weiterhin auf dasselbe Blattobjekt — der Rest des Makros läuft also weiter. Aus demselben Grund sollte langlebiger Code den CodeName des Blatts verwenden (Sheet3, gesetzt im Eigenschaftenfenster des VBA-Editors): Er ist ein geparster Bezug innerhalb von VBA, und die Worksheets-Anleitung zeigt, warum keine Umbenennung eines Registers ihn brechen kann. Der CodeName ist schreibgeschützt, solange Code läuft; Sie können den CodeName eines Blatts also nicht per Makro umbenennen, so wie Sie sein Register umbenennen.

Um den Blattnamen in einer Zelle anzuzeigen, nehmen Sie eine Formel statt Code:

' In einer Zelle (Excel 365):  =TEXTAFTER(CELL("filename", A1), "]")
' Liefert den Namen des Blatts, auf dem die Formel steht; leer, bis die Arbeitsmappe gespeichert ist.

Die Namensregeln hinter Fehler 1004

Excel weist einen Namen zurück, der gegen eine seiner Regeln verstößt, und jede Zurückweisung ist derselbe Laufzeitfehler 1004:

  • Höchstens 31 Zeichen und nicht leer.
  • Keines von : \ / ? * [ ].
  • Kein Apostroph als erstes oder letztes Zeichen.
  • Nicht gleich einem anderen Blatt der Arbeitsmappe, ohne Beachtung der Groß-/Kleinschreibung (sales kollidiert mit Sales).
  • Nicht History, das englische Excel für sein Blatt zur Änderungsnachverfolgung reserviert.

Die Anleitung zum Hinzufügen von Blättern behandelt diese Regeln dort, wo ein neues Blatt seinen ersten Namen bekommt. Für Umbenennungen lautet die praktische Antwort: Weisen Sie nie einen Namen zu, den Sie nicht bereinigt haben. Eine kleine Bereinigungsfunktion erledigt jede Regel außer der Eindeutigkeit:

Function SafeSheetName(ByVal s As String) As String
    Dim ch As Variant
    For Each ch In Array(":", "\", "/", "?", "*", "[", "]")
        s = Replace(s, ch, "-")
    Next ch
    s = Left$(Trim$(s), 31)
    Do While Left$(s, 1) = "'"
        s = Mid$(s, 2)
    Loop
    Do While Right$(s, 1) = "'"
        s = Left$(s, Len(s) - 1)
    Loop
    If Len(s) = 0 Then s = "Sheet"
    SafeSheetName = s
End Function

Kürzen Sie vor dem Entfernen der Apostrophe, nicht danach: Das Abschneiden auf 31 Zeichen kann am neuen Ende einen Apostroph freilegen.

Die Falle: ein Blatt nach einer Zelle benennen

Die häufigste Umbenennung in echten Arbeitsmappen lautet „benenne jedes Blatt nach dem Wert in A1". Sie wirkt harmlos:

ws.Name = ws.Range("A1").Value     ' A1 enthaelt ein Datum

Enthält A1 ein Datum, liefert .Value einen Date-Wert, und VBA wandelt ihn im kurzen Datumsformat der Regionaleinstellungen des Computers in Text um. Auf einem deutschen PC ist das 30.09.2026 — ein völlig zulässiger Blattname. Auf einem US-PC ist es 9/30/2026, und die Schrägstriche lösen Fehler 1004 aus. Dasselbe Makro besteht in München jeden Test und stürzt in Chicago ab. Zahlen tragen eine leisere Variante desselben Problems in sich: Auch das Dezimaltrennzeichen wechselt mit der Region.

Die Lösung: Legen Sie den Text selbst fest und bereinigen Sie ihn dann:

Dim v As Variant
v = ws.Range("A1").Value
If IsDate(v) Then
    ws.Name = SafeSheetName(Format(v, "yyyy-mm-dd"))
Else
    ws.Name = SafeSheetName(CStr(v))
End If

Format mit einem ausdrücklichen Muster erzeugt auf jedem Rechner denselben Text. Das ist die Regel für jeden Namen, der aus Daten gebaut wird: Sie formatieren ihn, nicht die Regionaleinstellungen.

In großer Zahl umbenennen und zwei Namen tauschen

Massen-Umbenennungen scheitern an Kollisionen, meist auf halber Strecke, und hinterlassen eine halb umbenannte Arbeitsmappe. Zwei Gewohnheiten verhindern das. Erstens: Machen Sie jeden Zielnamen eindeutig, bevor Sie ihn zuweisen, mithilfe der Existenzprüfung für Blätter:

Function UniqueSheetName(wb As Workbook, ByVal base As String) As String
    Dim nm As String, n As Long
    nm = base
    Do While SheetExists(nm, wb)
        n = n + 1
        nm = Left$(base, 31 - Len(" (" & n & ")")) & " (" & n & ")"
    Loop
    UniqueSheetName = nm
End Function

Zweitens: Wenn zwei Blätter ihre Namen tauschen, gehen Sie über einen temporären Namen. A in B umzubenennen, während B noch existiert, ist ein Duplikat und löst 1004 aus; ein Tausch in drei Schritten kollidiert nie:

Sub SwapSheetNames(ws1 As Worksheet, ws2 As Worksheet)
    Dim n1 As String, n2 As String
    n1 = ws1.Name: n2 = ws2.Name
    ws1.Name = "~swap~"
    ws2.Name = n1
    ws1.Name = n2
End Sub

Nur die Groß-/Kleinschreibung zu ändern — sales in Sales — ist keine Kollision: Es ist dasselbe Blatt, und Excel akzeptiert es.

Die Abwägung: vor dem Umbenennen nach Text-Bezügen suchen

Eine Umbenennung von Hand hat dieselbe Wirkung wie eine per Code, die Entscheidung dreht sich also nicht um VBA. Sie dreht sich darum, von welcher Sorte Bezug die Arbeitsmappe abhängt. Ist alles, was auf das Blatt zeigt, ein geparster Bezug, benennen Sie ungeniert um: Excel erledigt das Refactoring. Buchstabiert irgendetwas den Namen als Text — INDIRECT, ein Hyperlink, ein Makro, ein Power-Query-Schritt, der das Blatt per Namen liest —, suchen Sie zuerst nach dem alten Namen (Strg+F, Suchen in: Formeln, Durchsuchen: Arbeitsmappe, und Strg+Umschalt+F im VBA-Editor) und korrigieren diese Stellen in derselben Änderung. Meine Regel: Benennen Sie Blätter um, die der Benutzer sieht, aber machen Sie Ihren Code nie davon abhängig, wie sie heißen. Lassen Sie Ihre Makros auf CodeNames oder auf Variablen laufen, die Sie einmal per Set setzen, und eine Umbenennung bleibt, was sie sein soll — ein Wechsel der Beschriftung.

Wie ExcelMaster hilft

Probleme mit Umbenennungen zeigen sich weit weg von der Umbenennung: ein INDIRECT, das nächsten Monat zu #REF! wird, ein Makro, das mit Fehler 9 stirbt, sobald eine Kollegin zum ersten Mal die Register aufräumt, ein Monatsblatt, das nur auf dem Laptop mit US-Datumsformat scheitert.

ExcelMaster lässt Sie die Aufgabe beschreiben — „benenne jedes Blatt nach der Region in A1 und korrigiere alles, was noch auf die alten Namen zeigt" — und schreibt die Umbenennung mit bereinigten, eindeutigen Namen, findet dann die Text-Bezüge, die eine Umbenennung zurücklassen würde, und aktualisiert sie im selben Durchgang.

Häufig gestellte Fragen

Wie benenne ich in VBA ein Blatt um?

Setzen Sie seine Name-Eigenschaft: Worksheets("Sheet1").Name = "Sales", oder ActiveSheet.Name = "Sales" für das aktive Blatt. Halten Sie das Blatt zuerst in einer Variablen, wenn das Makro es danach weiter verwendet, denn Worksheets("Sheet1") findet es nicht mehr, sobald sich der Name geändert hat.

Warum bekomme ich beim Umbenennen eines Blatts Fehler 1004?

Der Name verstößt gegen eine Regel: Er ist länger als 31 Zeichen, leer, enthält eines von : \ / ? * [ ], beginnt oder endet mit einem Apostroph, lautet History oder stimmt ohne Beachtung der Groß-/Kleinschreibung mit einem anderen Blatt der Arbeitsmappe überein. Bereinigen Sie den Namen mit einer Bereinigungsfunktion und prüfen Sie vor dem Zuweisen, dass er noch nicht vergeben ist.

Werden Formeln aktualisiert, wenn ich ein Blatt umbenenne?

Formeln, die das Blatt direkt referenzieren, etwa =Sales!B4, werden automatisch aktualisiert, ebenso definierte Namen, Diagramme und Gültigkeitslisten. Als Text geschriebene Bezüge nicht: INDIRECT("Sales!B4"), Hyperlink-Ziele und VBA-Zeichenketten wie Worksheets("Sales") behalten den alten Namen und brechen.

Wie benenne ich ein Blatt nach einem Zellwert um?

Lesen Sie die Zelle, wandeln Sie den Wert selbst in Text um und bereinigen Sie ihn dann: Nehmen Sie Format(value, "yyyy-mm-dd") für Datumswerte und CStr für alles andere, und schicken Sie das Ergebnis durch eine Funktion, die unzulässige Zeichen entfernt. Weisen Sie eine Datumszelle direkt zu, hängt der Name vom regionalen Datumsformat des PCs ab.

Wie lese ich in VBA den Namen des aktiven Blatts aus?

Lesen Sie ActiveSheet.Name. Für ein bestimmtes Blatt lesen Sie ws.Name an einer Arbeitsblatt-Variablen. Um den eigenen Namen eines Blatts in einer Zelle anzuzeigen, verwenden Sie in Excel 365 =TEXTAFTER(CELL("filename", A1), "]"), was funktioniert, sobald die Arbeitsmappe gespeichert wurde.

Getestet in

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

Verwandte Anleitungen: VBA Hide Sheet · VBA Check If Sheet Exists · VBA Worksheets · VBA Add Sheet · VBA Copy Sheet · VBA Format · VBA Replace · VBA Named Range