TL;DR —
Name oldPath As newPathbenennt eine Datei um — aber wennnewPathauf einen anderen Ordner zeigt, verschiebt VBA die Datei dorthin. Eine Anweisung erledigt beide Aufgaben. Und anders alsFileCopyweigert sichNamezu überschreiben: Existiert das Ziel bereits, löst eserror 58aus, statt es zu ersetzen.
Sub RenameAndMove()
Name "C:\Reports\draft.xlsx" As "C:\Reports\final.xlsx" ' gleicher Ordner -> ein Umbenennen
Name "C:\Reports\final.xlsx" As "C:\Archive\final.xlsx" ' anderer Ordner -> ein VERSCHIEBEN
End Sub
Umbenennen und Verschieben fühlen sich wie zwei verschiedene Operationen an, also suchen die meisten nach
zwei verschiedenen Befehlen. VBA faltet sie in eine Anweisung — Name — und die Überraschung ist nicht, dass
es umbenennt, sondern dass dieselbe Anweisung die Datei still verschiebt, sobald sich der Zielordner
unterscheidet. Fügen Sie ihre sture Weigerung zu überschreiben hinzu, und Name verhält sich anders als
jedes andere Festplatten-Werkzeug in VBA. Lernen Sie diese zwei Eigenschaften, und es wird vorhersehbar.
Was Sie lernen
- Das mentale Modell —
Nameist Umbenennen und Verschieben in einer Anweisung - Warum
Namesich miterror 58weigert zu überschreiben — das Gegenteil vonFileCopy - Warum
Namekeine Laufwerke wechseln kann und wieFileCopy+KilloderMoveFilediese Aufgabe erledigt - Die anderen Fehler — fehlende Quelle (
53), geöffnete Datei (70) — und wie Sie sie absichern - Die Syntax-Falle
Name old As newund warum sie neben der.Name-Eigenschaft seltsam aussieht - Wann Sie
FileSystemObject.MoveFilebevorzugen und das sichere Umbenennungsmuster für unbeaufsichtigte Makros
Das mentale Modell: Umbenennen und Verschieben sind dieselbe Anweisung
Die zentrale Einsicht ist, dass Name sich nicht um das Konzept von Umbenennen gegenüber Verschieben
schert — es kümmert sich nur um den alten Pfad und den neuen Pfad. Es entfernt den
Verzeichniseintrag am alten Pfad und legt einen am neuen Pfad an. Ist der Ordnerteil gleich, lesen Sie das
als Umbenennen. Unterscheidet sich der Ordnerteil, landet die Datei woanders — ein Verschieben:
Name "C:\In\a.xlsx" As "C:\In\b.xlsx"— gleicher Ordner, neuer Name → UmbenennenName "C:\In\a.xlsx" As "C:\Out\a.xlsx"— neuer Ordner, gleicher Name → VerschiebenName "C:\In\a.xlsx" As "C:\Out\b.xlsx"— neuer Ordner und neuer Name → Verschieben und Umbenennen zugleich
Es gibt in eingebautem VBA keine separate „Verschieben“-Anweisung — Name ist das Verschieben. Sobald Sie
es als „ändere den Pfad“ sehen, folgt jedes Verhalten weiter unten.
Name weigert sich zu überschreiben — das Gegenteil von FileCopy
Hier bricht Name mit dem Rest des Festplatten-Werkzeugkastens. Existiert am neuen Pfad bereits eine Datei,
wird Name sie nicht ersetzen — es hält mit einem Fehler an:
Name "C:\Reports\draft.xlsx" As "C:\Reports\final.xlsx" ' error 58 - "File already exists"
Vergleichen Sie die drei eingebauten Anweisungen und ihre widersprüchlichen Antworten auf „was, wenn das Ziel existiert?“:
Kill— löscht ohne Rückfrage (das Ziel ist der Zweck).FileCopy— überschreibt das Ziel still.Name— weigert sich und lösterror 58aus.
Das ist ein Sicherheitsmerkmal: Name wird niemals versehentlich eine bestehende Datei zerstören. Aber es
bedeutet auch, dass ein unbeaufsichtigtes Makro in dem Augenblick anhält, in dem der Zielname bereits
vergeben ist. Wenn Sie das Ziel ersetzen wollen, löschen Sie es zuerst — und sichern Sie das mit einer
Existenzprüfung ab:
If Dir("C:\Reports\final.xlsx") <> "" Then Kill "C:\Reports\final.xlsx" ' das Ziel freimachen
Name "C:\Reports\draft.xlsx" As "C:\Reports\final.xlsx" ' jetzt gelingt es
Dieser Existenztest ist wieder der Einzeiler aus prüfen, ob eine Datei
existiert; hier ist er es, der ein geplantes Umbenennen davon abhält, an
error 58 zu stoppen.
Name kann keine Laufwerke wechseln — verwenden Sie FileCopy + Kill oder MoveFile
Name verschiebt Dateien innerhalb eines Laufwerks, indem es einen Verzeichniseintrag umschreibt, was
schnell und günstig ist. Es kann eine Datei nicht auf ein anderes Laufwerk verschieben, weil das ein
physisches Kopieren der Bytes erfordert:
Name "C:\Reports\March.xlsx" As "D:\Archive\March.xlsx" ' error 74 - "Can't rename with different drive"
Ein laufwerksübergreifendes Verschieben ist ein Kopieren plus ein Löschen — genau die Gleichung aus der Copy-File-Anleitung:
FileCopy "C:\Reports\March.xlsx", "D:\Archive\March.xlsx" ' die Bytes auf das andere Laufwerk kopieren
Kill "C:\Reports\March.xlsx" ' dann das Original entfernen
Führen Sie das Kill erst aus, nachdem Sie bestätigt haben, dass die Kopie angekommen ist — dieses
Löschen ist endgültig. Oder lassen Sie das
FileSystemObject beides in einem Aufruf mit MoveFile erledigen, das
laufwerksübergreifende Verschiebungen intern behandelt (weiter unten behandelt).
Die anderen Fehler: fehlende Quelle und geöffnete Dateien
Zwei weitere Laufzeitfehler runden Name ab, und beide haben dieselben Lösungen wie der Rest der
Datei-Anweisungen:
Name "C:\Reports\missing.xlsx" As "C:\Reports\x.xlsx" ' error 53 - Quelle nicht gefunden
Name "C:\Reports\open.xlsx" As "C:\Reports\x.xlsx" ' error 70 - Datei ist geoeffnet/gesperrt
error 53— die Quelle existiert nicht. Sichern Sie mitIf Dir(oldPath) <> "" Thenab, bevor Sie umbenennen.error 70— die Datei (oder ihr Ziel) ist geöffnet. Sie können keine Arbeitsmappe umbenennen, die in Excel geöffnet ist; schließen Sie sie zuerst mitClose, dann benennen Sie die Datei auf der Festplatte um.
Ein robustes Umbenennen sichert also drei Dinge ab: Die Quelle existiert, das Ziel existiert nicht (oder wurde gerade gelöscht), und die Datei ist nicht geöffnet. Das ist mehr Sorgfalt, als ein Umbenennen zu brauchen scheint, aber es ist genau das, was ein unbeaufsichtigtes Makro davon abhält, an einem dialogfreien Laufzeitfehler hängen zu bleiben.
Die Syntax-Falle: Name old As new, nicht Name(old, new)
Name ist eine Anweisung, keine Funktion, und ihre Syntax ist ungewöhnlich — die beiden Pfade werden
durch das Schlüsselwort As verbunden, ohne Klammern und ohne Komma:
Name oldPath As newPath ' korrekt - Anweisungsform mit dem As-Schluesselwort
Name(oldPath, newPath) ' falsch - so funktioniert Name nicht; Kompilier-/Parse-Fehler
Sie liest sich außerdem verwirrend, weil VBA .Name bereits überall im Objektmodell als Eigenschaft
verwendet (ws.Name, wb.Name). Das Datei-umbenennende Name ist eine Top-Level-Anweisung, unabhängig von
diesen Eigenschaften; Name x As y auf einer eigenen Zeile zu sehen ist das Erkennungszeichen, dass es die
Dateioperation ist, kein Eigenschafts-Lesen.
FileSystemObject.MoveFile und das sichere Umbenennungsmuster
Die Objektmodell-Alternative ist MoveFile, und für Verschiebungen ist sie oft die schönere Wahl:
Dim fso As Object
Set fso = CreateObject("Scripting.FileSystemObject") ' spaete Bindung - laeuft auf jedem Rechner
fso.MoveFile "C:\Reports\March.xlsx", "D:\Archive\" ' behandelt laufwerksuebergreifend; abschliessender \ = in den Ordner
MoveFile verschiebt über Laufwerke hinweg ohne manuelles Kopieren-dann-Löschen, akzeptiert Platzhalter und
nimmt ein Ziel in Ordnerform (abschließender \). Wie Name weigert es sich zu überschreiben — das Ziel
muss also zuerst frei sein. Für ein reines Umbenennen an Ort und Stelle gibt es keine eigene FSO-Methode;
Name ist weiterhin das kürzeste Werkzeug, oder MoveFile mit einem vollständigen neuen Pfad im selben
Ordner.
Alles zusammengenommen, das sichere Umbenennen, das ein unbeaufsichtigtes Makro nicht ins Stocken bringt:
Dim src As String, dst As String
src = "C:\Reports\draft.xlsx": dst = "C:\Reports\final.xlsx"
If Dir(src) = "" Then Exit Sub ' nichts zum Umbenennen
If Dir(dst) <> "" Then Kill dst ' das Ziel freimachen, damit Name nicht auf error 58 trifft
Name src As dst ' Umbenennen oder Verschieben auf demselben Laufwerk
Das ehrliche Fazit: Name für dasselbe Laufwerk, Kopieren-plus-Löschen für laufwerksübergreifend
Name ist die einzeilige Antwort für das Umbenennen und für das Verschieben innerhalb eines Laufwerks —
vorausgesetzt, Sie respektieren seine zwei prägenden Eigenschaften. Vier Regeln:
- Umbenennen oder Verschieben auf demselben Laufwerk →
Name old As new— die ganze Aufgabe in einer Anweisung. - Es weigert sich zu überschreiben → machen Sie das Ziel zuerst frei (
Killnach einer Existenzprüfung), sonst stoppt es anerror 58. - Laufwerksübergreifendes Verschieben →
Namekann es nicht; verwenden SieFileCopy+Killoderfso.MoveFile. - Quelle, Ziel und Öffnungszustand absichern → damit ein geplantes Umbenennen nie an
error 53,58,70oder74hängen bleibt.
In dem Augenblick, in dem Sie error 74 sehen, hören Sie auf, Name das Laufwerk wechseln zu lassen — das
ist Windows, das Ihnen sagt, dass ein Verschieben über Volumes hinweg ein Kopieren ist, und das Werkzeug
ändert sich entsprechend.
Wie ExcelMaster hilft
Eine Datei sicher umzubenennen heißt, sich zu merken, dass Name auch verschiebt, dass es sich weigert
zu überschreiben, dass es keine Laufwerke wechseln kann und dass es bei einer fehlenden Quelle oder
einer geöffneten Datei stehen bleibt — vier separate Fallen um eine Anweisung, die aussieht, als sollte sie
nur umbenennen.
ExcelMaster schreibt das Umbenennen,
das nicht ins Stocken gerät. Beschreiben Sie den Job — „benenne jeden Export mit dem heutigen Datum um“ oder
„verschiebe fertige Dateien auf das Archivlaufwerk“ — und es erzeugt die korrekte Anweisung: Name für ein
Umbenennen oder Verschieben auf demselben Laufwerk mit der Ziel-Freimach-Absicherung, ein
FileCopy-plus-Kill oder fso.MoveFile, wenn das
Ziel auf einem anderen Laufwerk liegt, und Existenzprüfungen, sodass error 58 oder 74 einen
unbeaufsichtigten Lauf nie anhält. Sie beschreiben das Ergebnis; es wählt für Sie zwischen Umbenennen,
Verschieben und Kopieren-plus-Löschen.
Häufig gestellte Fragen
Wie benenne ich in VBA eine Datei um?
Verwenden Sie die Name-Anweisung mit dem Schlüsselwort As: Name "C:\In\old.xlsx" As "C:\In\new.xlsx".
Sie benennt die Datei an Ort und Stelle um, wenn beide Pfade im selben Ordner liegen. Sichern Sie sie zuerst
ab — Name löst error 53 aus, wenn die Quelle fehlt, und error 58, wenn eine Datei mit dem neuen Namen
bereits existiert, prüfen Sie also, ob die Quelle existiert, und machen Sie das Ziel frei (mit Kill nach
einem Existenztest), bevor Sie umbenennen.
Verschiebt die VBA-Name-Anweisung auch Dateien?
Ja. Name ändert den Pfad der Datei, wenn der neue Pfad also in einem anderen Ordner liegt,
verschiebt VBA die Datei dorthin — Name "C:\In\a.xlsx" As "C:\Out\a.xlsx" verschiebt a.xlsx von In
nach Out. Es gibt in eingebautem VBA keine separate Verschieben-Anweisung; Name ist das Verschieben,
solange beide Ordner auf demselben Laufwerk liegen. Für ein laufwerksübergreifendes Verschieben verwenden
Sie FileCopy plus Kill oder fso.MoveFile.
Warum liefert VBA Name error 58 File already exists?
Weil eine Datei mit dem neuen Namen bereits existiert und Name sich weigert zu überschreiben — das
Gegenteil von FileCopy, das still überschreibt. Das ist ein Sicherheitsmerkmal, aber es hält ein
unbeaufsichtigtes Makro an. Um das Ziel zu ersetzen, löschen Sie es zuerst: If Dir(newPath) <> "" Then Kill newPath, dann Name oldPath As newPath. Vergewissern Sie sich stets, dass Sie die bestehende Datei wirklich
verwerfen wollen, bevor Sie sie mit Kill löschen.
Wie verschiebe ich in VBA eine Datei auf ein anderes Laufwerk?
Name kann keine Laufwerke wechseln — Name "C:\a.xlsx" As "D:\a.xlsx" löst error 74 aus, „Can't rename
with different drive“. Ein laufwerksübergreifendes Verschieben ist ein Kopieren plus ein Löschen: FileCopy "C:\a.xlsx", "D:\a.xlsx", dann Kill "C:\a.xlsx" (erst nachdem Sie bestätigt haben, dass die Kopie gelungen
ist). Alternativ führt fso.MoveFile aus dem FileSystemObject ein laufwerksübergreifendes Verschieben in
einem einzigen Aufruf aus.
Was ist der Unterschied zwischen der Name-Anweisung und der Name-Eigenschaft?
Sie haben nichts miteinander zu tun. Die Name-Anweisung benennt eine Datei auf der Festplatte um oder
verschiebt sie — Name oldPath As newPath, eine Top-Level-Anweisung mit dem Schlüsselwort As. Die
.Name-Eigenschaft liest oder setzt den Namen eines Objekts im Excel-Modell, etwa ws.Name für ein
Arbeitsblatt oder wb.Name für eine Arbeitsmappe. Name x As y auf einer eigenen Zeile zu sehen ist die
Dateioperation; something.Name ist die Eigenschaft.
Getestet in
Getestet in: Excel 365 (Windows 11), VBA 7.1 — zuletzt geprüft am 22.08.2026.
Verwandte Anleitungen: VBA Copy File · VBA Delete File · VBA Check If File Exists · VBA Dir · VBA FileSystemObject
