2016-08-08 7 views
2

フォルダ内のすべてのファイルを削除しようとしています。今日VBAに保存されていないフォルダ内のすべてのファイルを削除します

フォルダにのみ.csv.txtファイルタイプを持つことになりますので、私はちょうどそれらの種類を削除するには、自分のコードを作りました。任意のファイルタイプを削除する方法はありますか?

これは私が今持っているコードです:

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 

ループは永遠に行くように見えるので、条件しDOに問題があります。しかし、それはまた私がそれを望むファイルを削除しません。

ご協力いただければ幸いです。ありがとうございました。

+1

「Dir」の「インスタンス」を2つ保存することはできません。 – Comintern

+0

あなたの質問は答えられましたが、私はあなたが 'Do While'のように' On Error resume next'を使用しないことをお勧めします...何らかのエラーが発生した場合、それをスキップしてループが実行されます永遠に、常にエラーをスキップします。非常に悪い考え。何らかの出口機構が必要です。 –

答えて

5

あなたが望むものを達成する最も簡単な方法です。これにより、今日保存されていないファイルタイプ、つまり変更日が今日と異なるファイルタイプが削除されます。

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

'objFile.Delete'ではなく' Kill objFile'を使用する理由はありますか? – Comintern

+1

@Comintern:いいえ。習慣のほうがよりです:Dキリング以外にも、削除よりも楽しいです:P –

+0

私は明らかにプログラミングを始めたばかりです。 "For Each"ループは、ここでもっと意味をなさないものです。コードは完全に動作しています。ありがとうございました。 – Jarom

関連する問題