Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Dateien mit Kill Funktion löschen

Dateien mit Kill Funktion löschen
Timo
Hallo zusammen,
ich lösche mit folgendem VBA-Code sämtliche txt Dateien im lokalen Temp Verzeichnis:
Sub TMP_Loeschen()
Dim Verzeichnis As String
Verzeichnis = Environ("TEMP")
On Error Resume Next
Kill (Verzeichnis & "\*.txt")
End Sub
Leider bricht er das Löschen immer ab, sobald er auf eine txt-Datei keinen Zugriff hat, bzw. wenn eine txt-Datei gerade verwendet wird. Diese gerade verwendeten bzw. geschützten Dateien sollen ja auch nicht gelöscht werden, jedoch soll er diese überspringen und die nächste Datei löschen.
Hat jemand eine Idee, was ich falsch mache?
Danke für Eure Antworten
Gruß Timo
Anzeige
AW: Dateien mit Kill Funktion löschen
11.08.2012 19:47:07
Matze,Matthias
Hallo Timo,
bin jetzt nicht der Profi für dein Anliegen, aber das geht ja standart mäßig in Windows auch nicht.
Du muss die Dateien die du NICHT löschen willst vorher aus dem Verzeichnis auslagern.
Daher wäre es sinnvoll sich den Ablauf vorher zu überlegen-
gruß Matze
aber vielleicht gibt es ja doch ne simple Lösung - lasse offen !
Anzeige
AW: Dateien mit Kill Funktion löschen
11.08.2012 20:24:07
Josef

Hallo Timo,
versuch es mal so.
' **********************************************************************
' Modul: Modul3 Typ: Allgemeines Modul
' **********************************************************************

Option Explicit

Public Enum XL_FILESTATUS
  XL_UNDEFINED = -1
  XL_CLOSED
  XL_OPEN
  XL_DONTEXIST
End Enum

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


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
    strFile = Dir
  Loop
  
End Sub



« Gruß Sepp »

Anzeige
AW: Dateien mit Kill Funktion löschen
11.08.2012 21:33:24
Timo
Hallo Sepp,
funktioniert leider nicht.
Laufzeitfehler 70
Zugriff verweigert
Gruß Timo
AW: Dateien mit Kill Funktion löschen
11.08.2012 22:53:01
Josef

Hallo Timo,
dann macht wohl Dir() Probleme.
' **********************************************************************
' Modul: Modul3 Typ: Allgemeines Modul
' **********************************************************************

Option Explicit

Public Enum XL_FILESTATUS
  XL_UNDEFINED = -1
  XL_CLOSED
  XL_OPEN
  XL_DONTEXIST
End Enum

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


Sub TMP_Loeschen()
  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
  Next
  
  Set objFSO = Nothing
  Set objFolder = Nothing
  Set objFile = Nothing
End Sub



« Gruß Sepp »

Anzeige
AW: Dateien mit Kill Funktion löschen
11.08.2012 23:18:29
Timo
Hallo Sepp,
funktioniert leider trotzdem nicht.
Laufzeitfehler 70
Zugriff verweigert
Es werden alle txt Dateien gelöscht, die vor der gesperrten liegen. Sobald er die gesperrte Datei erreicht hat, bricht er ab und die nachfolgenden werden ignoriert :-(
Gruß Timo
AW: Dateien mit Kill Funktion löschen
11.08.2012 23:20:36
Josef

Hallo Timo,
dann hilft wohl nur rohe Gewalt;-))
' **********************************************************************
' Modul: Modul3 Typ: Allgemeines Modul
' **********************************************************************

Option Explicit

Public Enum XL_FILESTATUS
  XL_UNDEFINED = -1
  XL_CLOSED
  XL_OPEN
  XL_DONTEXIST
End Enum

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


Sub TMP_Loeschen()
  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)
  
  On Error Resume Next
  
  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
  Next
  
  Set objFSO = Nothing
  Set objFolder = Nothing
  Set objFile = Nothing
End Sub



« Gruß Sepp »

Anzeige
AW: Dateien mit Kill Funktion löschen
11.08.2012 23:37:24
Timo
Hallo Sepp,
jetzt funktioniert es. Definiere mir mal bitte "rohe Gewalt".
Was ist hier anders?
Ich habe herausgefunden, dass Deine vorhergehende Version auch funktioniert, wenn man direkt unter Sub TMP_Loeschen()
On Error Resume Next
schreibt.
Was ist jetzt sicherer, die rohe Gewalt Version oder das mit "On Error Resume Next"?
Vielen Dank für Deine Mühe!
Gruß Timo
Anzeige
AW: Dateien mit Kill Funktion löschen
12.08.2012 01:46:39
Franc
Genau das ist auch der Unterschied bei der Variante mit "roher Gewalt". ^^
"On Error Resume Next" steht vor der Schleife beim löschen.
AW: Dateien mit Kill Funktion löschen
12.08.2012 12:50:29
Timo
Hallo Franc,
habs auch gemerkt.^^
Vielen Dank (besonders an Sepp) für Eure Hilfe!
Gruß Timo
;

Forumthreads zu verwandten Themen

Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

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

  1. 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.

  2. 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.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige