TL;DR —
RmDirlöscht einen Ordner nur, wenn er leer ist. Richten Sie es auf einen Ordner, der noch Dateien oder Unterordner enthält, und es lösterror 75aus — das genaue Gegenteil vonKill, das jede Datei ohne Rückfrage löscht. „Diesen Ordner löschen“ heißt in Wahrheit „leere ihn zuerst, dann entferne ihn“.
Sub RemoveTempFolder()
RmDir "C:\Temp\Empty" ' funktioniert nur, wenn C:\Temp\Empty nichts enthaelt
RmDir "C:\Temp\Reports" ' error 75, wenn Reports noch eine Datei oder einen Unterordner enthaelt
End Sub
RmDir ist das Spiegelbild von Kill. Wo Kill Dateien ohne Rückfrage und ohne Undo zerfetzt, ist RmDir
in die entgegengesetzte Richtung pingelig: Es weigert sich, einen Ordner anzufassen, der noch
irgendetwas enthält. Diese Weigerung ist ein Sicherheitsmerkmal — Sie können einen vollen Ordner nicht
aus Versehen auslöschen —, aber sie bedeutet, dass die alltägliche Bitte „lösche diesen Ordner und alles
darin“ keine einzelne Anweisung ist. Es ist eine kleine Routine, und zu wissen, warum, ist das ganze Thema.
Was Sie lernen
- Das mentale Modell —
RmDirentfernt nur einen leeren Ordner, das Gegenteil vonKill - Warum ein nicht leerer Ordner
error 75auslöst und warum das ein Sicherheitsmerkmal ist - Warum
RmDirOrdner löscht, niemals Dateien — undKilldas Gegenstück für Dateien ist - Wie Sie einen Ordner leeren (die Dateien mit
Kill), bevor SieRmDiraufrufen, und wie Unterordner Rekursion erzwingen - Wann Sie zu
FileSystemObject.DeleteFoldergreifen — ein Aufruf, ganzer Baum, kein Undo - Das abgesicherte Löschmuster, das ein unbeaufsichtigtes Makro nicht ins Stocken bringt
Das mentale Modell: RmDir entfernt nur einen leeren Ordner
Die zentrale Einsicht ist, dass RmDir den Verzeichniseintrag löscht, nicht seinen Inhalt. Es entfernt
ein Verzeichnis nur, wenn nichts mehr darin ist — keine Dateien, keine Unterordner. Stellen Sie dies neben
Kill, und die beiden bilden ein sauberes Paar:
Killlöscht Dateien, jede Datei, sofort, ohne Papierkorb.RmDirlöscht Ordner, aber nur leere, und verweigert alles mit Inhalt.
VBAs zwei Löschanweisungen sind also bewusst eng gefasst: eine nur Dateien, eine nur leere Ordner. Keine erledigt das, was die Leute tatsächlich in ein Suchfeld tippen — „einen Ordner und alles darin löschen“ —, weil das die gefährliche Operation ist, und die eingebauten Anweisungen zwingen Sie, sie selbst zusammenzusetzen.
Error 75: RmDir verweigert einen nicht leeren Ordner
Zielen Sie mit RmDir auf einen Ordner, der noch Dateien oder Unterordner enthält, und es hält an:
RmDir "C:\Temp\Reports" ' error 75 - "Path/File access error", wenn Reports nicht leer ist
Das ist das prägende Verhalten, und es ist beabsichtigt. RmDir lässt keine einzelne Zeile still einen
Ordner voller Arbeit zerstören. Vergleichen Sie es mit seinem Gegenstück, um die Asymmetrie zu spüren:
Kill "C:\Temp\*.xlsx" löscht jede passende Datei ohne Warnung, während RmDir "C:\Temp" auf denselben
Ordner rundweg verweigert. Eine Anweisung ist nur Gefahr; die andere nur Vorsicht. Um einen gefüllten Ordner
zu entfernen, müssen Sie ihn zuerst leeren.
Zuerst leeren: die Dateien mit Kill löschen, dann RmDir
Das zweistufige Muster ist, die Dateien des Ordners mit Kill zu löschen und
dann den nun leeren Ordner mit RmDir zu entfernen:
Kill "C:\Temp\Reports\*.*" ' jede Datei im Ordner loeschen (endgueltig - kein Undo)
RmDir "C:\Temp\Reports" ' jetzt ist der Ordner leer, also gelingt dies
Das funktioniert, wenn der Ordner nur Dateien enthält. Enthält er auch Unterordner, kann Kill nicht
helfen — Kill löscht Dateien, niemals Ordner —, und jeder Unterordner muss selbst geleert und entfernt
werden. Ein Ordnerbaum erfordert daher Rekursion: bis zur tiefsten Ebene vordringen, ihre Dateien mit
Kill löschen, sie mit RmDir entfernen und sich nach oben zurückarbeiten. Weil Kill auf *.*
endgültig ist, tun Sie dies nur, wenn Sie sicher sind, dass der Inhalt entbehrlich
ist, und protokollieren Sie, was Sie gleich löschen, bevor Sie es löschen.
FileSystemObject.DeleteFolder: ein Aufruf, ganzer Baum, kein Undo
Wenn Sie wirklich „Ordner und alles darin, weg“ wollen, hat das FileSystemObject den einzelnen Aufruf, der
RmDir zu sein sich weigert:
Dim fso As Object
Set fso = CreateObject("Scripting.FileSystemObject") ' spaete Bindung - laeuft auf jedem Rechner
fso.DeleteFolder "C:\Temp\Reports" ' loescht den Ordner UND den gesamten Inhalt
DeleteFolder entfernt den Ordner, seine Dateien und jeden Unterordner in einem Zug — kein manuelles Leeren,
keine Rekursion zu schreiben. Diese Macht ist zugleich die Gefahr: Wie Kill
umgeht es den Papierkorb, und es gibt kein Undo. Es akzeptiert Platzhalter im letzten Pfadelement, und ein
zweites Argument True erzwingt das Löschen schreibgeschützter Dateien. Behandeln Sie fso.DeleteFolder wie
scharfe Munition — sichern Sie es genauso hart ab, wie Sie Kill absichern würden, und richten Sie es niemals
auf einen benutzergelieferten Pfad ohne Prüfung.
Der andere Fehler: RmDir auf einen fehlenden Ordner
Der zweite Laufzeitfehler ist der Fall des fehlenden Ordners, und er stimmt nicht mit Kills Nummer
überein:
RmDir "C:\Temp\Gone" ' error 76 - "Path not found", wenn der Ordner nicht existiert
error 76— der Ordner ist nicht da. Sichern Sie mitIf Dir(path, vbDirectory) <> "" Thenab, bevor Sie entfernen, sodass ein bereits verschwundener Ordner als Erfolg behandelt wird, nicht als Absturz.error 75— der Ordner ist nicht leer (oder ist in Benutzung / schreibgeschützt). Leeren Sie ihn zuerst oder verwenden Siefso.DeleteFolder.
Beachten Sie den Unterschied zu Kill, das bei einer fehlenden Datei
error 53 auslöst; RmDir auf einen fehlenden Ordner löst error 76 aus. Gleiche Idee, andere Nummer,
weil das eine mit Dateien arbeitet und das andere mit Ordnern — die
Existenzprüfung verwendet das vbDirectory-Flag für Ordner.
Das sichere Löschmuster für ein unbeaufsichtigtes Makro
Fügt man die Absicherungen zusammen, ergibt sich das Ordnerlöschen, das einen geplanten Lauf nicht ins Stocken bringt:
Sub SafeRemoveFolder(ByVal folder As String)
If Dir(folder, vbDirectory) = "" Then Exit Sub ' schon weg - nichts zu tun
Dim fso As Object
Set fso = CreateObject("Scripting.FileSystemObject")
fso.DeleteFolder folder ' Ordner + gesamter Inhalt, in einem Aufruf
End Sub
Die Dir(folder, vbDirectory)-Absicherung fängt den häufigen Fall „es ist nicht da“ ab, sodass error 76
nie ausgelöst wird, und fso.DeleteFolder behandelt einen gefüllten Ordner ohne handgeschriebene Rekursion.
Wenn Sie ausdrücklich das sichere Verhalten wollen — sich weigern, irgendetwas Nichtleeres zu löschen —,
behalten Sie RmDir und lassen Sie error 75 Ihr Sicherheitsgurt sein. Wählen Sie das Werkzeug danach, wie
sehr Sie den Inhalt schützen wollen.
Das ehrliche Fazit: RmDir für leer, DeleteFolder für den Baum
RmDir ist das richtige Werkzeug, um einen Ordner zu entfernen, von dem Sie wissen, dass er leer ist; alles
andere ist eine Entscheidung darüber, wie viel Sicherheit Sie wollen. Vier Regeln:
- Leerer Ordner →
RmDir path— eine Anweisung, und es verweigert (error 75), wenn Sie sich geirrt haben und er nicht leer war. - Ordner voller Dateien → zuerst die Dateien mit
Kill, dann die leere Hülle mitRmDir. - Ordnerbaum, Inhalt entbehrlich →
fso.DeleteFolder— ein Aufruf, aber behandeln Sie es wieKill: kein Papierkorb, kein Undo. - Existenz absichern →
If Dir(path, vbDirectory) <> "" Then, sodass ein fehlender Ordner ein No-op ist, keinerror 76.
In dem Augenblick, in dem Sie sich dabei ertappen, nach On Error Resume Next zu greifen, um RmDir
„einfach funktionieren“ zu lassen, halten Sie inne — dieser Fehler sagt Ihnen, dass der Ordner nicht leer
ist, und die Abhilfe ist, bewusst zu entscheiden, ob sein Inhalt überleben soll.
Wie ExcelMaster hilft
Einen Ordner sicher zu löschen heißt zu wissen, dass RmDir nur einen leeren Ordner entfernt (sonst
error 75), dass es Ordner löscht, aber niemals Dateien, dass ein fehlender Ordner error 76 ist, nicht
53, und dass fso.DeleteFolder der eine Aufruf ist, der einen ganzen Baum auslöscht — ohne Undo.
ExcelMaster schreibt das Löschen, das
Ihrer Absicht entspricht. Beschreiben Sie den Job — „entferne den Temp-Ordner nach jedem Lauf“ oder „räume
den Exportbaum des letzten Monats“ — und es erzeugt den richtigen Code: RmDir mit einer Existenzabsicherung
für einen leeren Ordner, einen Kill-dann-RmDir-Durchlauf, wenn er Dateien
enthält, oder ein abgesichertes fso.DeleteFolder, wenn der ganze Baum weg soll. Sie beschreiben, was übrig
bleiben soll; es wählt das Werkzeug, das es übrig lässt.
Häufig gestellte Fragen
Wie lösche ich in VBA einen Ordner?
Verwenden Sie die RmDir-Anweisung: RmDir "C:\Temp\Old". Sie entfernt den Ordner, aber nur, wenn der
Ordner leer ist — ein Ordner, der noch Dateien oder Unterordner enthält, löst error 75 aus. Sichern Sie
sie zuerst mit einer Existenzprüfung ab — If Dir("C:\Temp\Old", vbDirectory) <> "" Then RmDir "C:\Temp\Old" —, damit ein bereits verschwundener Ordner kein error 76 auslöst.
Warum liefert VBA RmDir error 75?
Weil der Ordner nicht leer ist. RmDir löscht nur einen leeren Ordner; enthält er noch irgendeine Datei
oder einen Unterordner, hält es mit error 75 an, „Path/File access error“. Das ist ein Sicherheitsmerkmal,
das verhindert, dass eine einzelne Zeile einen vollen Ordner auslöscht. Um einen gefüllten Ordner zu
entfernen, löschen Sie zuerst seine Dateien mit Kill, dann RmDir den leeren Ordner — oder verwenden Sie
FileSystemObject.DeleteFolder, das den Ordner und seinen gesamten Inhalt in einem Aufruf entfernt.
Wie lösche ich in VBA einen Ordner, der nicht leer ist?
RmDir kann das nicht — es verweigert einen nicht leeren Ordner. Entweder leeren Sie ihn zuerst
(Kill "C:\Temp\Old\*.*", um die Dateien zu löschen, dann RmDir "C:\Temp\Old", wobei Sie etwaige
Unterordner rekursiv behandeln), oder Sie verwenden das FileSystemObject: fso.DeleteFolder "C:\Temp\Old"
löscht den Ordner und alles darin in einem einzigen Aufruf. DeleteFolder umgeht den Papierkorb und kann
nicht rückgängig gemacht werden, sichern Sie es also so sorgfältig ab, wie Sie Kill absichern würden.
Was ist der Unterschied zwischen RmDir und Kill in VBA?
Sie sind Gegensätze. Kill löscht Dateien — jede Datei, sofort, ohne Papierkorb — und löst bei einer
fehlenden Datei error 53 aus. RmDir löscht Ordner, aber nur leere, und löst bei einem nicht
leeren Ordner error 75 aus und bei einem fehlenden error 76. Kill löscht niemals einen Ordner und
RmDir niemals eine Datei, um einen Ordner voller Dateien zu entfernen, braucht es also beide: die Inhalte
mit Kill, dann die Hülle mit RmDir.
Verschiebt RmDir einen Ordner in den Papierkorb?
Nein. RmDir löscht den Ordnereintrag direkt — es gibt keinen Papierkorb und kein Undo, genau wie Kill bei
Dateien. Dasselbe gilt für FileSystemObject.DeleteFolder. Weil keine davon rückgängig gemacht werden kann,
vergewissern Sie sich vor dem Löschen, dass der Ordner entbehrlich ist, und sichern Sie den Pfad ab, damit
ein unbeaufsichtigtes Makro nicht das falsche Verzeichnis entfernt.
Getestet in
Getestet in: Excel 365 (Windows 11), VBA 7.1 — zuletzt geprüft am 23.08.2026.
Verwandte Anleitungen: VBA MkDir · VBA CurDir · VBA Delete File · VBA Check If File Exists · VBA FileSystemObject
