TL;DR —
Kill pathlöscht eine Datei endgültig. Es gibt keinen Papierkorb, keine Bestätigung und kein Undo — einKillist 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 —
Killist endgültiges Löschen, nicht „in den Papierkorb verschieben“ - Warum
Killbei 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
Killkeinen Ordner löschen kann und wieRmDirundDeleteFolderdiese Aufgabe aufteilen - Wann
FileSystemObject.DeleteFilemit seinem Force-FlagKillbei 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 SieKillaufrufen.error 70— die Datei ist geöffnet, schreibgeschützt oder von einem anderen Prozess gesperrt. Sie können keine Arbeitsmappe mitKilllöschen, die in Excel geöffnet ist; schließen Sie sie zuerst mitClose.
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
Dirund geben Sie mitDebug.Printjeden 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 & "\*.*"einKill "\*.*"— 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) mitKilllöschen, dann den Ordner mitRmDirentfernen.fso.DeleteFolder path— dieFileSystemObject-Variante entfernt einen Ordner und alles darin, rekursiv, in einem Aufruf. Das ist das Werkzeug, wenn Sie einen ganzen Baum tilgen müssen — und wieKillverwendet 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 absichern —
If Dir(path) <> "" Then Kill path, damit eine fehlende Datei ein No-op ist, keinerror 53. - Den gesperrten Fall behandeln — hüllen Sie
Killin einen echtenOn Error-Behandler mit einerErr-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 einerDir-Schleife zu löschen. - Archivieren Sie, bevor Sie etwas löschen, das Sie zurückwollen könnten — ein
FileCopyin einen Archivordner ist billig; eine mitKillgelö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
