HOWTO · VBA

So löschen Sie eine Datei in VBA

Erfahren Sie, wie Sie mit VBA eine einzelne Datei, Dateien nach Dateierweiterung oder einen leeren Ordner löschen.

Auf dieser Seite

Verwenden Sie die VBA-Anweisung Kill, um eine Datei oder übereinstimmende Dateien zu löschen. Für eine einzelne Datei bietet FileSystemObject die Methode DeleteFile und die Methode FileExists, mit der Sie ihren Pfad vorher überprüfen können. Verwenden Sie RmDir, um einen leeren Ordner zu entfernen. Wählen Sie den Abschnitt für Ihre Aufgabe und überprüfen Sie den Pfad und die Zieldateien, bevor Sie Löschcode ausführen; diese Vorgänge entfernen Dateien oder Ordner.

Datei in VBA löschen

Die richtige Vorgehensweise hängt davon ab, was Sie entfernen müssen. Kill ist eine VBA-Anweisung, die einen Dateipfad oder ein Platzhaltermuster akzeptiert. FileSystemObject ist ein separates Objektmodell für die Arbeit mit Dateien und Ordnern; seine Elemente DeleteFile und FileExists unterstützen das Löschen und Pfadprüfungen. RmDir entfernt einen leeren Ordner. Dies sind unterschiedliche Optionen, sodass Kill keine FileSystemObject-Funktion ist.

Ersetzen Sie vor dem Anpassen eines Beispiels dessen Beispielpfad durch den vollständigen Pfad, den Sie verwenden möchten. Überprüfen Sie Ordner und Dateinamen sorgfältig. Ein Platzhalter kann mehrere Dateien in diesem Ordner betreffen, überprüfen Sie daher die beabsichtigten Übereinstimmungen, bevor Sie Code zum massenhaften Löschen ausführen. Die folgenden VBA-Snippets sind Syntaxbeispiele, keine Windows/VBA-Laufzeittests: Die bereitgestellten Ausführungsnachweise decken nur die PowerShell-Illustration des Dateisystems ab und enthalten kein beobachtetes Ergebnis für einen VBA-Host.

Eine einzelne Datei in VBA löschen

Die Anweisung Kill ist eine kurze Option für eine bekannte Datei. Diese vollständige Prozedur löscht die Arbeitsmappe am angegebenen Pfad, wenn sie in einem VBA-Host ausgeführt wird:

Sub DeleteFileWithKill(): Kill "D:\Test\testFile.xlsx": End Sub

Ersetzen Sie den Beispielpfad durch die genaue Datei, die Sie entfernen möchten. Kill fragt nicht nach einer Bestätigung, überprüfen Sie daher den Pfad, bevor Sie es ausführen. Das Beispiel setzt voraus, dass die Datei existiert; falls nicht, löst Kill einen VBA-Laufzeitfehler aus. Fügen Sie eine gezielte Fehlerbehandlung hinzu, wenn die Prozedur eine fehlende Datei als normales Ergebnis behandeln muss.

Sie können eine Datei auch über FileSystemObject löschen. Erstellen Sie das Objekt, legen Sie den Pfad fest und rufen Sie seine Methode DeleteFile auf:

Sub DeleteFileWithFSO(): Dim FileSysObj As Object: Dim FileToDel As String: Set FileSysObj = CreateObject("Scripting.FileSystemObject"): FileToDel = "D:\Test\testFile.xlsx": FileSysObj.DeleteFile FileToDel, True: End Sub

Das zweite Argument, True, erlaubt das Löschen einer schreibgeschützten Datei. Ändern Sie es in False, wenn schreibgeschützte Dateien erhalten bleiben sollen. Dieses spät gebundene Beispiel verwendet CreateObject, sodass kein Projektverweis auf die Scripting Runtime hinzugefügt werden muss.

Wenn die Datei möglicherweise fehlt, überprüfen Sie sie mit FileExists, bevor Sie DeleteFile aufrufen. Die folgende Prozedur zeigt für beide Ergebnisse eine Meldung an und überspringt das Löschen, wenn der Pfad nicht gefunden wird:

Sub DeleteFileAfterChecking()
Dim FileSysObj As Object
Dim FileToDelete As String
Set FileSysObj = CreateObject("Scripting.FileSystemObject")
FileToDelete = "D:\Test\testFile.xlsx"
If FileSysObj.FileExists(FileToDelete) Then
FileSysObj.DeleteFile FileToDelete, True
MsgBox "File Deleted"
Else
MsgBox "There is no file with the name you provided!"
End If
End Sub

FileExists überprüft den Pfad, bevor die Prozedur DeleteFile aufruft; es verhindert nicht, dass ein anderer Prozess die Datei zwischen diesen Vorgängen ändert. Wenn Sie Zugriffs- oder Löschfehler behandeln müssen, fügen Sie eine für Ihre Arbeitsmappe geeignete Fehlerbehandlung hinzu, statt anzunehmen, dass die Prüfung das Löschen garantiert.

Dieses eigenständige PowerShell-Fixture zeigt das Erstellen und Entfernen einer temporären Datei. Es ist eine Illustration des Dateisystems, kein VBA-Code und kein Nachweis für das Verhalten in einem Office-Host.

$path = Join-Path ([System.IO.Path]::GetTempPath()) ("vba-delete-demo-" + [guid]::NewGuid().ToString() + ".txt")
Set-Content -LiteralPath $path -Value "sample"
Remove-Item -LiteralPath $path

Alle Textdateien in VBA löschen

Um Textdateien aus einem Ordner zu entfernen, verwenden Sie einen Platzhalterpfad. D:\Test\Dst\*.txt entspricht .txt-Dateien direkt in diesem Ordner; Unterordner werden nicht durchsucht. Diese vollständige Prozedur übergibt dieses Muster an Kill:

Sub DeleteTxtFile(): Kill "D:\Test\Dst\*.txt": End Sub

Überprüfen Sie den Ordner und seine übereinstimmenden Dateinamen, bevor Sie die Prozedur ausführen. Jede übereinstimmende Textdatei ist ein Ziel. Das Muster durchsucht keine Unterordner. Enthält der Ordner keine übereinstimmende .txt-Datei, löst Kill einen VBA-Laufzeitfehler aus; überprüfen Sie daher die Übereinstimmungsmenge oder fügen Sie eine Fehlerbehandlung hinzu, wenn dieser Zustand möglich ist. Verengen Sie das Verzeichnis oder ändern Sie die Erweiterung erst, nachdem Sie die beabsichtigte Menge bestätigt haben, und halten Sie nicht zusammenhängende Dateien nach Möglichkeit außerhalb des ausgewählten Ordners. Diese Ergebnisse folgen der dokumentierten Betriebssemantik von VBA; für dieses Beispiel wurde kein Windows/VBA-Ausführungsergebnis beobachtet.

Alle Excel-Dateien in VBA löschen

Um .xlsx-Arbeitsmappen in einem Ordner zu erfassen, verwenden Sie den entsprechenden Platzhalterpfad. Die vollständige Prozedur erfasst übereinstimmende Arbeitsmappen direkt in diesem Ordner, nicht jede Arbeitsmappe in einem Verzeichnisbaum:

Sub DeleteXlFile(): Kill "D:\Test\Dst\*.xlsx": End Sub

Überprüfen Sie den Ordner und die übereinstimmenden Arbeitsmappennamen, bevor Sie dieses massenhafte Löschen ausführen. Das Muster .xlsx umfasst keine anderen Excel-Formate wie .xls oder .xlsm; verwenden Sie ein separates, gezieltes Muster, wenn diese Formate ebenfalls beabsichtigt sind. Halten Sie das Verzeichnis eng, damit der Platzhalter nur Dateien auswählt, die Sie entfernen möchten. Wie beim Textdateimuster löst Kill einen VBA-Laufzeitfehler aus, wenn keine Arbeitsmappe übereinstimmt; dieses Verhalten wird aus der VBA-Semantik beschrieben und wurde in den bereitgestellten Laufzeitnachweisen nicht ausgeübt.

Einen Ordner in VBA löschen

Verwenden Sie RmDir, um einen leeren Ordner zu entfernen. Diese vollständige Prozedur nennt das Beispielverzeichnis:

Sub DeleteFolder(): RmDir "D:\Test\Dst": End Sub

RmDir entfernt Dateien oder Unterordner in einem nicht leeren Ordner nicht rekursiv. Es erfordert einen leeren Ordner; der Aufruf, solange Dateien oder Unterordner verbleiben, löst einen VBA-Laufzeitfehler aus. Verschieben oder löschen Sie seinen Inhalt separat und rufen Sie dann RmDir für den Ordner selbst auf. Überprüfen Sie, ob der Pfad das beabsichtigte Verzeichnis nennt, bevor Sie die Prozedur ausführen. Dies ist das dokumentierte VBA-Verhalten, aber für einen Aufruf mit leerem oder nicht leerem Ordner wurde kein Windows/VBA-Laufzeitergebnis beobachtet.