Bilder aus Ordner löschen
13.08.2006 19:29:10
Patrick
Ich habe in den Zellen A1 bis A536 Namen von Bildern (alles .jpg) stehen. Im Ordner 'Bilder' hat es aber 1200 Bilder. Ich möchte nun alle Bilder löschen, die nicht in der Excel-Datei stehen, als so dass am Schluss nur noch die 536 Bilder aus der Liste vorhanden sind. Das nachstehende Makro habe ich hier gefunden, nur läuft da ewig die Sanduhr und nichts wird gelöscht oder dann werden gleich alle Bilder gelöscht(!). Ein Neustart vom PC und Deaktivieren vom Virenscanner bringt auch keine Abhilfe.
Die Excel-Datei liegt im gleichen Verzeichnis wie die Bilder und das WS heisst 'Bilder'.
Weiss jemand wo der Fehler liegt oder hat jemand ein anderes Makro das ich ausprobieren könnte?
Vielen Dank!
Grüsse
Patrick
Sub JPG_loeschen()
'Die Bildnamen müssen in einer Tabelle mit Namen "Bilder" in Spalte A stehen.
'Bildnamen ohne Pfadangabe, z.B. Test.jpg _
Wenn die Bildnamen mit komplettem Pfad angegeben sind, einfach die Zuweisung _
der Variablen strName ändern: strName=.FoundFiles(i)
'Diese Datei muss im gleichen Ordner wie die Bilder stehen.
'Unterordner werden nicht durchsucht.
Dim wshBilder As Worksheet, _
strOrdner As String, _
strName As String, _
fs As FileSearch, _
i As Integer, _
n As Integer, _
bolGebraucht As Boolean
Application.ScreenUpdating = False
Set wshBilder = Worksheets("Bilder") 'Tabelle mit Bildnamen
strOrdner = ThisWorkbook.Path
Set fs = Application.FileSearch
'Dateien suchen
With fs
.LookIn = strOrdner
.Filename = "*.jpg" 'Dateityp jpg
.SearchSubFolders = False 'keine Unterordner durchsuchen
If .Execute > 0 Then
For i = 1 To .FoundFiles.Count
bolGebraucht = False
strName = Right(.FoundFiles(i), Len(.FoundFiles(i)) - Len(strOrdner) - 1)
'gefundene Datei mit Liste vergleichen
For n = 1 To wshBilder.Range("A:A").End(xlUp).Row
If UCase(wshBilder.Cells(n, 1)) = UCase(strName) Then
bolGebraucht = True 'Datei steht in Liste
Exit For
End If
Next n
'Wenn Datei nicht in Liste, dann löschen
If bolGebraucht = False Then
Kill .FoundFiles(i)
End If
Next i
End If
End With
Application.ScreenUpdating = True
End Sub