Dateien mit Kill Funktion löschen
Schritt-für-Schritt-Anleitung
Um mit VBA Dateien zu löschen, die im TEMP-Verzeichnis gespeichert sind, kannst du den folgenden Code verwenden. Dieser überspringt geschützte oder geöffnete Dateien, sodass das Skript nicht abbricht.
Sub TMP_Loeschen()
Dim Verzeichnis As String, strFile As String
Verzeichnis = Environ("TEMP") & "\"
strFile = Dir(Verzeichnis & "*.txt", vbNormal)
Do While strFile <> ""
If FileStatus(Verzeichnis & strFile) = XL_CLOSED Then
Kill Verzeichnis & strFile
End If
strFile = Dir
Loop
End Sub
Public Function FileStatus(xlFile As String) As XL_FILESTATUS
On Error Resume Next
Dim File%: File = FreeFile
Err.Clear
Open xlFile For Input Access Read Lock Read As #File
Close #File
Select Case Err.Number
Case 0: FileStatus = XL_CLOSED
Case 70: FileStatus = XL_OPEN
Case 76: FileStatus = XL_DONTEXIST
Case Else: FileStatus = XL_UNDEFINED
End Select
End Function
Häufige Fehler und Lösungen
-
Laufzeitfehler 70: Zugriff verweigert
Dieser Fehler tritt auf, wenn eine Datei gesperrt oder in Benutzung ist. Stelle sicher, dass du On Error Resume Next
im Code verwendest, um diesen Fehler zu ignorieren und die Schleife fortzusetzen.
-
Dateien werden nicht gelöscht
Überprüfe, ob die Bedingungen für das Löschen korrekt sind und dass du die richtige Dateiendung verwendest. Achte darauf, dass die Dateien im TEMP-Verzeichnis tatsächlich die Endung .txt
haben.
Alternative Methoden
Eine Alternative zur Verwendung der Kill
-Funktion ist der Einsatz von FileSystemObject
(FSO), das eine flexiblere Handhabung von Dateien ermöglicht:
Sub TMP_Loeschen_FSO()
Dim objFSO As Object, objFolder As Object, objFile As Object
Dim strPath As String
strPath = Environ("TEMP")
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFolder = objFSO.GetFolder(strPath)
For Each objFile In objFolder.Files
If objFile.Name Like "*.txt" Then
If FileStatus(objFile.Path) = XL_CLOSED Then
objFSO.DeleteFile objFile.Path
End If
End If
Next objFile
Set objFSO = Nothing
Set objFolder = Nothing
Set objFile = Nothing
End Sub
Praktische Beispiele
Hier sind ein paar gängige Szenarien, in denen du mit Excel VBA
Dateien löschen möchtest:
- Löschen von Protokolldateien: Du kannst täglich alte Protokolldateien im TEMP-Verzeichnis löschen, um Speicherplatz zu sparen.
- Bereinigung von temporären Dateien: Während der Entwicklung von Anwendungen kann es hilfreich sein, temporäre Dateien regelmäßig zu löschen, um sicherzustellen, dass die Anwendung mit den neuesten Daten arbeitet.
Tipps für Profis
- Verwende
On Error Resume Next
sorgfältig, um unerwartete Laufzeitfehler zu vermeiden, aber stelle sicher, dass du den Fehlerbehandlungsmechanismus verstehst, um nicht versehentlich wichtige Fehler zu ignorieren.
- Implementiere eine Protokollierung, um nachzuvollziehen, welche Dateien gelöscht wurden. Dies kann durch das Schreiben in eine Log-Datei erfolgen, um den Überblick zu behalten.
FAQ: Häufige Fragen
1. Wie kann ich sicherstellen, dass ich nur nicht gesperrte Dateien lösche?
Du kannst die Funktion FileStatus
verwenden, um den Status der Datei zu überprüfen, bevor du sie mit Kill
löscht.
2. Was ist der Unterschied zwischen Kill
und FileSystemObject
?
Kill
ist eine einfache Methode zum Löschen von Dateien, während FileSystemObject
eine flexiblere und leistungsfähigere Option für den Umgang mit Dateien und Verzeichnissen bietet.