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

Forumthread: "For Each" für Datein ?

"For Each" für Datein ?
lupo
Hallo Forum.
Ich möchte in einem Ordner die Namen der Datein durchsuchen und vergleichen. Ist der vergleich ungleich, so sollen die Datein gelöscht werden.
Den Vergleich führe ich über die LIKE - Funktion durch.
Damit alle Datein verglichen werden, wollte ich FOR EACH einsetzen.
Geht das eigentlich oder ist FOR EACH nur in der Tabelle einsetzbar.
Mein Makro läuft jedenfalls noch nicht hat jemand eine Idee bwz. kann mir bitte jemand auf die Sprünge helfen?
DANKE, schon einmal im Voraus.
lupo
Hier mein Makro:
Sub neu()
Dim file As Object
Dim backupDir
Dim backupFile
Dim backupType
Dim time2
Dim time3
Dim day
backupDir = Worksheets("einstellungen").Range("B2")    ' Pfad / Ordner der durchsucht werden  _
soll
backupFile = Worksheets("einstellungen").Range("B4")   ' Dateiname nach dem gesucht wird
backupType = Worksheets("einstellungen").Range("B5")   ' Dateityp txt, xls usw.
day = Worksheets("einstellungen").Range("B7")          ' Anzahl der Tage
time2 = Format(Now - day, "_DD_MM_YYYY")
time3 = Format(Now, "_DD_MM_YYYY")
file = (backupDir & "\*.*")
For Each file In backupDir
If file Like (backupDir & "\" & backupFile & time2 & "." & backupType) - (backupDir & "\" &  _
backupFile & time3 & "." & backupType) Then
Kill file
End If
Next
End Sub

Anzeige

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: "For Each" für Datein ?
19.10.2010 02:25:08
fcs
Hallo lupo,
die Suche nach Dateien kann man mit Dir durchführen.
Die Suchtreffer werden dann in einer Do-Loop-Schleife abgearbeitet.
Die Art deines Like-Vergleiches dürfte auch nicht funktionieren.
Besser das Datum aus dem Datei-Namen ermitteln und dann mit den Vorgabewerten vergleichen.
Ich würde es etwa wie folgt umsetzen.
Vorsicht beim Testen! Kill löscht ohne viele Spuren zu hinterlassen.
Gruß
Franz
Sub neu()
Dim sFile As String
Dim backupDir
Dim backupsFile
Dim backupType
Dim time1, sTime1 As String
Dim time2
Dim time3
Dim dDay
' Pfad / Ordner der durchsucht werden soll
backupDir = Worksheets("einstellungen").Range("B2")
' Dateiname nach dem gesucht wird
backupsFile = Worksheets("einstellungen").Range("B4")
' Dateityp txt, xls usw.
backupType = Worksheets("einstellungen").Range("B5")
' Anzahl der Tage
dDay = Worksheets("einstellungen").Range("B7")
'Datum der Tage des Vergleichszeitraums
time2 = Date - dDay
time3 = Date
'Dateien im Back-Up-Verzeichnis suchen
sFile = Dir(backupDir & "\*." & backupType)
Do Until sFile = ""
If sFile Like backupsFile & "_##_##_####." & backupType Then
'Datum im Dateinamen ermitteln
sTime1 = Mid(sFile, Len(backupsFile) + 2, 10)
sTime1 = Replace(sTime1, "_", ".")
time1 = CDate(sTime1)
'Datum mit Vergleichszeitraum vergleichen und Datei ggf. löschen
If time1 >= time2 And time1 

Anzeige
AW: "For Each" für Datein ?
19.10.2010 15:02:06
lupo
Hallo Ihr.
Danke für den Input.
Den Vorschlag von Franz habe ich umgesetzt.
Danke!
Allerdings haben ich noch die Zeile:
'' If time1 >= time2 And time1 < time3 Then '' ' Orginal
in
'' If time1 <= time2 And time1 < time3 Then ''
geändert.
Jetzt werden alle alten Datein gelöscht, die älter als zwei Tage sind und gestern und heute bleiben erhalten.
Super!
Mit dem Kill-Befehl habe ich auch schon überlegt, ob ich das so abändere dass die Datein in den Papierkorb verschoben werden. Nicht dass das ganze mal in falsche Hände gerät......
Bis zum nächsten Mal,
lupo
Anzeige
AW: "For Each" für Datein ?
19.10.2010 11:00:42
Rudi
Hallo,
ungetestet:
Sub neu()
Dim oFile As Object, oFolder As Object, oFS As Object
Dim BackUpDate As Date
Dim BackUpDir
Dim BackUpFile
Dim BackUpType
Dim time2
Dim iDays
With Worksheets("einstellungen")
BackUpDir = .Range("B2")    ' Pfad / Ordner der durchsucht werden soll
BackUpFile = .Range("B4")   ' Dateiname nach dem gesucht wird
BackUpType = .Range("B5")   ' Dateityp txt, xls usw.
iDays = .Range("B7")          ' Anzahl der Tage
End With
time2 = Date - iDays
Set oFS = CreateObject("Scripting.FileSystemObject")
Set oFolder = oFS.GetFolder(BackUpDir)
For Each oFile In oFolder.Files
If oFile.Name Like BackUpFile & "_##_##_####." & BackUpType Then
BackUpDate = CDate(Replace(Mid(oFile.Name, Len(BackUpFile) + 1, 10), "_", "."))
Select Case BackUpDate
Case time2 To Date: Kill oFile
End Select
End If
Next oFile
End Sub

Vorsicht! Kill löscht ohne Papierkorb.
Gruß
Rudi
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige

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