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 denenWorksheets("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 (
saleskollidiert mitSales). - 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
