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

VBA Delete File in Excel — Kill, FileSystemObject.DeleteFile und warum es kein Undo gibt

|

VBA Delete File in Excel — Kill, FileSystemObject.DeleteFile und warum es kein Undo gibt

TL;DRKill path löscht eine Datei endgültig. Es gibt keinen Papierkorb, keine Bestätigung und kein Undo — ein Kill ist eher ein Schredder als das Ziehen einer Datei in den Papierkorb. Es löst außerdem einen Fehler aus, statt nichts zu tun, wenn die Datei fehlt oder geöffnet ist, deshalb prüft das sichere Muster immer zuerst:

Sub DeleteTempFile()
    Dim path As String
    path = "C:\Reports\~temp.xlsx"
    If Dir(path) <> "" Then Kill path      ' nur loeschen, was tatsaechlich existiert - und es ist fuer immer weg
End Sub

Nachdem ein Makro seine Dateien kopiert oder verarbeitet hat, ist der letzte Schritt oft das Aufräumen — die temporäre Datei löschen, die Exporte von gestern wegräumen. Kill ist die eingebaute Anweisung, die das tut, und sie ist auf eine Weise wirklich gefährlich, wie es FileCopy nicht ist: Es gibt kein Zurückholen der Datei. Alles Wissenswerte über Kill ist eine Regel, um auf der richtigen Seite dieser Einbahntür zu bleiben.

Was Sie lernen

  • Das mentale Modell — Kill ist endgültiges Löschen, nicht „in den Papierkorb verschieben“
  • Warum Kill bei einer fehlenden oder geöffneten Datei einen Fehler auslöst, statt still nichts zu tun
  • Wie ein Platzhalter viele Dateien auf einmal löscht — mächtig und gnadenlos bei Tippfehlern
  • Warum Kill keinen Ordner löschen kann und wie RmDir und DeleteFolder diese Aufgabe aufteilen
  • Wann FileSystemObject.DeleteFile mit seinem Force-Flag Kill bei schreibgeschützten Dateien schlägt
  • Das sichere Löschmuster — prüfen, dann löschen und im Zweifel zuerst archivieren

Das mentale Modell: Kill ist endgültig, nicht der Papierkorb

Das Allerwichtigste an Kill ist, was es nicht tut: Es verschiebt die Datei nicht in den Papierkorb. Wenn Sie eine Datei im Datei-Explorer löschen, behält Windows still eine Kopie, die Sie wiederherstellen können. Kill umgeht das alles. Die Datei wird sofort von der Festplatte gelöst, und es gibt keinen unterstützten Weg, sie aus VBA zurückzubekommen.

Behandeln Sie Kill so, wie ein Unix-Admin rm behandelt — als eine unumkehrbare Operation, die Sie sorgfältig zielen und bewusst auslösen. Diese Sichtweise treibt jede Regel weiter unten. Falls eine Datei noch gebraucht werden könnte, ist der richtige Schritt kein cleveres Kill; es ist, sie in ein Archiv zu kopieren, bevor Sie das Original löschen.

Kill löst bei fehlender oder geöffneter Datei einen Fehler aus — es tut nicht einfach nichts

Überraschend viele nehmen an, dass Kill bei einer nicht existierenden Datei einfach nichts tut. Tut es nicht — es löst einen Laufzeitfehler aus:

Kill "C:\Reports\does-not-exist.xlsx"   ' error 53 - "File not found"
Kill "C:\Reports\open-book.xlsx"        ' error 70 - "Permission denied" (Datei ist geoeffnet/gesperrt)
  • error 53 — die Datei ist nicht da. Sichern Sie mit einem Existenztest ab, bevor Sie Kill aufrufen.
  • error 70 — die Datei ist geöffnet, schreibgeschützt oder von einem anderen Prozess gesperrt. Sie können keine Arbeitsmappe mit Kill löschen, die in Excel geöffnet ist; schließen Sie sie zuerst mit Close.

Das kanonische Löschen ist also eine zweiteilige Absicherung: Testen Sie mit Dir(path) <> "", dass die Datei existiert, für den häufigen Fall „nicht da“, und umschließen Sie den Aufruf mit On Error für den selteneren gesperrten Fall — denn eine Datei kann den Existenztest bestehen und eine Millisekunde später dennoch gesperrt sein:

If Dir(path) <> "" Then
    On Error Resume Next          ' den Fall der gesperrten Datei explizit behandeln
    Kill path
    If Err.Number <> 0 Then MsgBox "Could not delete: " & path & " (" & Err.Description & ")"
    On Error GoTo 0
End If

Beachten Sie den Unterschied zum Kopieren: Hier ist On Error ein bewusster Behandler für einen bekannten, seltenen Fehlschlag, kein pauschaler Unterdrücker. Jedes Kill blind in On Error Resume Next ohne Err-Prüfung zu hüllen, ist der Weg, auf dem das Aufräumen still aufhört zu geschehen.

Platzhalter löschen viele Dateien auf einmal — ohne Rückfrage

Kill akzeptiert dieselben *- und ?-Platzhalter wie Dir und wendet sie auf jeden Treffer in einer einzigen Anweisung an:

Kill "C:\Reports\Temp\*.tmp"     ' loescht JEDE .tmp in diesem Ordner - keine Rueckfrage, kein Undo

Das ist enorm nützlich zum Aufräumen und wirklich gefährlich. Es gibt keine Bestätigung, also löscht ein Tippfehler im Muster — *.xls* statt *.tmp oder der falsche Ordner — weit mehr, als Sie beabsichtigt haben, sofort und endgültig. Zwei Sicherheitsgewohnheiten:

  • Lesen Sie, bevor Sie löschen. Ist das Muster überhaupt dynamisch, durchlaufen Sie es zuerst mit Dir und geben Sie mit Debug.Print jeden Namen aus oder protokollieren Sie ihn, der gelöscht würde, und löschen Sie dann in einem zweiten Durchlauf.
  • Bauen Sie den Pfad niemals aus ungeprüfter Eingabe. Eine leere Variable macht aus Kill folder & "\*.*" ein Kill "\*.*" — völlig auf den falschen Ort gerichtet.

Eine Feinheit bei Platzhaltern und Schleifen: Sie können eine Dir-Aufzählung nicht gefahrlos ausführen und Treffer innerhalb derselben Schleife mit Kill löschen, weil das Löschen von Dateien genau den Ordner verändert, den der Dir-Cursor durchläuft. Sammeln Sie die Namen zuerst in ein Array, dann löschen Sie — das Zwei-Pass-Muster aus der Dir-Anleitung.

Kill löscht Dateien, keine Ordner — RmDir und DeleteFolder

Kill entfernt Dateien. Richten Sie es auf einen Ordner, erhalten Sie error 5 (invalid procedure call). Ordner sind ein anderes Werkzeugset, und sie teilen sich danach auf, ob der Ordner leer ist:

  • RmDir path — entfernt nur einen leeren Ordner. Ist noch irgendetwas darin, error 75. Der eingebaute Weg, einen Ordner zu löschen, ist also: seinen Inhalt (oder die passenden Dateien) mit Kill löschen, dann den Ordner mit RmDir entfernen.
  • fso.DeleteFolder path — die FileSystemObject-Variante entfernt einen Ordner und alles darin, rekursiv, in einem Aufruf. Das ist das Werkzeug, wenn Sie einen ganzen Baum tilgen müssen — und wie Kill verwendet es den Papierkorb nicht.

Diese zu verwechseln ist häufig: Leute versuchen Kill "C:\OldExports", um einen Ordner zu entfernen, und sind über den Fehler überrascht. Dateien nutzen Kill; leere Ordner nutzen RmDir; volle Bäume nutzen fso.DeleteFolder.

FileSystemObject.DeleteFile: das Force-Flag für schreibgeschützte Dateien

Kill weigert sich, eine schreibgeschützte Datei zu löschen — es löst error 70 aus, denselben Berechtigungsfehler wie bei einer geöffneten Datei. Das FileSystemObject gibt Ihnen ein saubereres Werkzeug mit einer expliziten Übersteuerung:

Dim fso As Object
Set fso = CreateObject("Scripting.FileSystemObject")   ' spaete Bindung - laeuft auf jedem Rechner
If fso.FileExists(path) Then fso.DeleteFile path, True  ' Force:=True loescht auch schreibgeschuetzte Dateien

DeleteFile passt außerdem zu fso.FileExists für einen zustandslosen Existenztest, der eine Dir-Schleife nie stört, und akzeptiert Platzhalter wie Kill. Greifen Sie dazu, wenn Sie das FileSystemObject ohnehin für den Rest der Aufgabe verwenden, oder speziell dann, wenn schreibgeschützte Dateien im Spiel sind — aber bedenken Sie, dass Force:=True gefährlicher ist als Kill, nicht weniger: Es löscht Dateien, die jemand bewusst geschützt hat.

Das ehrliche Fazit: prüfen, dann löschen — und im Zweifel archivieren

Kill ist das richtige Werkzeug zum Aufräumen, und es verlangt mehr Respekt als jede andere Datei-Anweisung, gerade weil es nicht rückgängig gemacht werden kann. Vier Regeln:

  • Existenz absichernIf Dir(path) <> "" Then Kill path, damit eine fehlende Datei ein No-op ist, kein error 53.
  • Den gesperrten Fall behandeln — hüllen Sie Kill in einen echten On Error-Behandler mit einer Err-Prüfung für die geöffnete oder schreibgeschützte Datei; unterdrücken Sie nicht pauschal.
  • Behandeln Sie Platzhalter wie scharfe Munition — lesen (oder protokollieren) Sie die Treffer vor einem dynamischen Kill *.*, und sammeln-dann-löschen Sie, statt innerhalb einer Dir-Schleife zu löschen.
  • Archivieren Sie, bevor Sie etwas löschen, das Sie zurückwollen könnten — ein FileCopy in einen Archivordner ist billig; eine mit Kill gelöschte Datei wiederherzustellen ist unmöglich.

Wenn Sie nicht sicher sind, dass eine Datei entbehrlich ist, löschen Sie sie nicht — kopieren Sie sie zuerst beiseite. Kill hat kein Undo, also sind Sie das Undo.

Wie ExcelMaster hilft

Dateien sicher zu löschen heißt, die Existenz abzusichern, den Fall der gesperrten Datei zu behandeln, ohne echte Fehler zu verschweigen, Platzhalter zu respektieren, die viele Dateien auf einmal tilgen, und zu wissen, dass Ordner RmDir oder DeleteFolder statt Kill brauchen — viel Vorsicht, um eine einzige unumkehrbare Anweisung zu hüllen.

ExcelMaster schreibt die sichere Version. Beschreiben Sie das Aufräumen — „lösche jede temporäre Datei in diesem Ordner nach dem Export“ oder „entferne den Archivordner vom letzten Monat“ — und es erzeugt das abgesicherte Kill mit Existenzprüfung und Fehlerbehandler, die Sammeln-dann-Löschen-Schleife, wenn Dateien aufgezählt werden, die Aufteilung RmDir/DeleteFolder für Ordner und zuerst eine Archivkopie, wenn die Dateien noch gebraucht werden könnten. Sie beschreiben das Ergebnis; es hält die Einbahntür davon ab, Sie zu erwischen.

Häufig gestellte Fragen

Wie lösche ich in VBA eine Datei?

Verwenden Sie die eingebaute Anweisung Kill path — zum Beispiel Kill "C:\Reports\temp.xlsx". Sichern Sie es zuerst mit einem Existenztest ab, If Dir(path) <> "" Then Kill path, denn Kill löst error 53 bei einer nicht existierenden Datei aus, statt nichts zu tun. Denken Sie daran, dass Kill endgültig löscht — es gibt keinen Papierkorb und kein Undo — kopieren Sie also alles, was Sie noch brauchen könnten, vor dem Löschen in ein Archiv.

Verschiebt VBA Kill die Datei in den Papierkorb?

Nein. Kill löscht die Datei sofort und endgültig; sie geht nicht in den Papierkorb, und es gibt keinen unterstützten Weg, sie aus VBA wiederherzustellen. Das unterscheidet sich vom Löschen im Datei-Explorer, der eine wiederherstellbare Kopie behält. Wenn Sie Papierkorb-Verhalten brauchen, müssen Sie die Windows-Shell-API aufrufen — behandeln Sie andernfalls jedes Kill als endgültig und archivieren Sie im Zweifel zuerst.

Warum liefert VBA Kill error 70 oder error 53?

error 53 (File not found) bedeutet, die Datei existiert nicht — sichern Sie mit If Dir(path) <> "" Then ab, bevor Sie Kill aufrufen. error 70 (Permission denied) bedeutet, die Datei ist geöffnet, schreibgeschützt oder von einem anderen Prozess gesperrt — schließen Sie zuerst jede geöffnete Arbeitsmappe, und verwenden Sie für schreibgeschützte Dateien fso.DeleteFile path, True mit dem Force-Flag. Kill löst in diesen Fällen einen Fehler aus, statt still nichts zu tun.

Wie lösche ich in VBA mehrere Dateien mit einem Platzhalter?

Kill akzeptiert Platzhalter, also löscht Kill "C:\Temp\*.tmp" jede .tmp-Datei in diesem Ordner in einer Anweisung — ohne Rückfrage und ohne Undo. Weil es keine Bestätigung gibt, protokollieren Sie die Treffer zuerst mit einer Dir-Schleife, wenn das Muster dynamisch ist, und löschen Sie niemals innerhalb einer Dir-Schleife (sammeln Sie die Namen in ein Array, dann löschen Sie), da das Löschen den Ordner verändert, den der Cursor durchläuft.

Wie lösche ich in VBA einen Ordner?

Kill löscht Dateien, keine Ordner. Um einen leeren Ordner zu entfernen, verwenden Sie RmDir path; hat er noch Inhalt, löschen Sie diesen zuerst mit Kill, dann RmDir. Um einen Ordner und alles darin in einem Aufruf zu löschen, verwenden Sie das FileSystemObject: fso.DeleteFolder path, das den ganzen Baum rekursiv entfernt. Wie Kill verwendet keines von beiden den Papierkorb.

Getestet in

Getestet in: Excel 365 (Windows 11), VBA 7.1 — zuletzt geprüft am 22.08.2026.

Verwandte Anleitungen: VBA Copy File · VBA Rename File · VBA Check If File Exists · VBA Dir · VBA FileSystemObject