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

VBA RmDir in Excel — einen Ordner löschen, aber nur, wenn er leer ist

|

VBA RmDir in Excel — einen Ordner löschen, aber nur, wenn er leer ist

TL;DRRmDir löscht einen Ordner nur, wenn er leer ist. Richten Sie es auf einen Ordner, der noch Dateien oder Unterordner enthält, und es löst error 75 aus — das genaue Gegenteil von Kill, 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 — RmDir entfernt nur einen leeren Ordner, das Gegenteil von Kill
  • Warum ein nicht leerer Ordner error 75 auslöst und warum das ein Sicherheitsmerkmal ist
  • Warum RmDir Ordner löscht, niemals Dateien — und Kill das Gegenstück für Dateien ist
  • Wie Sie einen Ordner leeren (die Dateien mit Kill), bevor Sie RmDir aufrufen, und wie Unterordner Rekursion erzwingen
  • Wann Sie zu FileSystemObject.DeleteFolder greifen — 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:

  • Kill löscht Dateien, jede Datei, sofort, ohne Papierkorb.
  • RmDir lö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 mit If Dir(path, vbDirectory) <> "" Then ab, 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 Sie fso.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 OrdnerRmDir 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 mit RmDir.
  • Ordnerbaum, Inhalt entbehrlichfso.DeleteFolder — ein Aufruf, aber behandeln Sie es wie Kill: kein Papierkorb, kein Undo.
  • Existenz absichernIf Dir(path, vbDirectory) <> "" Then, sodass ein fehlender Ordner ein No-op ist, kein error 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