2016-08-08 78 views
2

Ich versuche, alle Dateien in einem Ordner zu löschen, die heute nicht gespeichert wurden.Löschen Sie alle Dateien in einem Ordner, die nicht heute in VBA gespeichert wurden

Der Ordner wird nur .csv und .txt Dateitypen, so habe ich meinen Code nur jene Arten zu löschen. Gibt es eine Möglichkeit, jeden Dateityp zu löschen?

Dies ist der Code, dass ich jetzt haben:

Sub delete() 

Dim MyFolder As String 
Dim MyFileTxt As String 
Dim MyFileCSV As String 

MyFolder = "C:\Users\Desktop\pdf_converter_test" 
MyFileTxt = Dir(MyFolder & "\*.txt") 
MyFileCSV = Dir(MyFolder & "\*.csv") 

Do While FileDateTime(MyFolder & MyFileTxt) <> Date 
    On Error Resume Next 
     If FileDateTime(MyFolder & MyFileTxt) <> Date Then 
      Kill MyFolder & MyFileTxt 
      MyFileTxt = Dir 
     End If 
Loop 

Do While FileDateTime(MyFolder & MyCSV) <> Date 
    On Error Resume Next 
     If FileDateTime(MyFolder & MyFileCSV) <> Date Then 
      Kill MyFolder & MyFileCSV 
      MyFileCSV = Dir 
     End If 
    Loop 

End Sub 

Die Schleife für immer zu gehen scheint, so gibt es ein Problem mit dem Do While Zustand. Aber es löscht auch nicht die Dateien, die ich möchte.

Jede Hilfe würde sehr geschätzt werden. Vielen Dank.

+1

Sie können 2 "Instanzen" von 'Dir' nicht so behalten. – Comintern

+0

Ihre Frage wurde beantwortet, aber ich rate Ihnen immer noch nie 'On Error resume next' zu verwenden, wie in einem' Do While' ... Wenn Sie jemals einen Fehler bekommen, überspringen Sie ihn einfach und die Schleife wird ausgeführt für immer, immer den Fehler überspringend. Sehr schlechte Idee. Du brauchst eine Art Exit-Mechanismus. –

Antwort

5

Die einfachste Art zu erreichen, was Sie wollen. Dadurch wird ein Dateityp gelöscht, der heute noch nicht gespeichert wurde. Das Änderungsdatum ist nicht dasselbe wie heute.

Sub Sample() 
    Dim sPath As String 
    Dim objFSO As Object, objFolder As Object  
    Dim objfile As Object 


    '~~> Change as needed 
    sPath = "C:\Users\Siddharth Rout\Desktop\Test\" 

    Set objFSO = CreateObject("Scripting.FileSystemObject") 
    Set objFolder = objFSO.GetFolder(sPath) 

    For Each objFile In objFolder.Files 
     If Format(objFile.DateLastModified, "DD-MM-YYYY") <> Format(Date, "DD-MM-YYYY") Then 
      Kill objFile 
     End If 
    Next objFile 
End Sub 
+0

Gibt es einen Grund, 'Kill objFile' anstelle von' objFile.Delete' zu ​​verwenden? – Comintern

+1

@Comintern: Nein. Es ist eher eine Gewohnheit: D Neben KILLING macht mehr Spaß als LÖSCHEN: P –

+0

Ich bin offensichtlich sehr neu im Programmieren. Die "For Each" -Schleife macht hier viel mehr Sinn. Der Code funktioniert einwandfrei. Vielen Dank. – Jarom