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

VBA Rename File in Excel — die Name-Anweisung, die auch Dateien verschiebt (und sich weigert zu überschreiben)

|

VBA Rename File in Excel — die Name-Anweisung, die auch Dateien verschiebt (und sich weigert zu überschreiben)

TL;DRName oldPath As newPath benennt eine Datei um — aber wenn newPath auf einen anderen Ordner zeigt, verschiebt VBA die Datei dorthin. Eine Anweisung erledigt beide Aufgaben. Und anders als FileCopy weigert sich Name zu überschreiben: Existiert das Ziel bereits, löst es error 58 aus, 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 — Name ist Umbenennen und Verschieben in einer Anweisung
  • Warum Name sich mit error 58 weigert zu überschreiben — das Gegenteil von FileCopy
  • Warum Name keine Laufwerke wechseln kann und wie FileCopy + Kill oder MoveFile diese Aufgabe erledigt
  • Die anderen Fehler — fehlende Quelle (53), geöffnete Datei (70) — und wie Sie sie absichern
  • Die Syntax-Falle Name old As new und warum sie neben der .Name-Eigenschaft seltsam aussieht
  • Wann Sie FileSystemObject.MoveFile bevorzugen 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 → Umbenennen
  • Name "C:\In\a.xlsx" As "C:\Out\a.xlsx" — neuer Ordner, gleicher Name → Verschieben
  • Name "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.
  • Nameweigert sich und löst error 58 aus.

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 mit If Dir(oldPath) <> "" Then ab, 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 mit Close, 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 LaufwerkName old As new — die ganze Aufgabe in einer Anweisung.
  • Es weigert sich zu überschreiben → machen Sie das Ziel zuerst frei (Kill nach einer Existenzprüfung), sonst stoppt es an error 58.
  • Laufwerksübergreifendes VerschiebenName kann es nicht; verwenden Sie FileCopy + Kill oder fso.MoveFile.
  • Quelle, Ziel und Öffnungszustand absichern → damit ein geplantes Umbenennen nie an error 53, 58, 70 oder 74 hä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