VBA Excel Ordner auslesen und Dateien entfernen

TheChosenNeo

Newbie
Registriert
Nov. 2017
Beiträge
6
Hallo Zusammen,

ich möchte in Excel-VBA einen Code erstellen der einen Ordner z.B: "D:\Test" ausliest und die vorhandenen PDFs prüft.

Die Dateien sind immer nach einem festen Schema benannt. Z.B. Testdatei 14.11.2017 oder Prüfung 12.10.2017.

Das Datum steht immer komplett da. Er sollte dies am besten auslesen und wenn die Datei sozusagen älter wie 1 Monat von heute gesehen ist direkt löschen.

Ich würde mich sehr freuen wenn ihr mir da irgendwie helfen könnt. :)

Liebe Grüße

Mario
 
Warum Excel VBA ?
Sowas sollte sich unter Windows10 mit einem Powershell Script / Batchdatei erledigen lassen.
 
Muss es im Excel sein? Als Batch ginge es zB so:

Code:
forfiles.exe /P "D:\Test" /S /M *.pdf /D -30 /C "cmd /c del /q @path"
 
ich verstehe den Hinweis, aber mein Excel Liste macht später auch noch andere schritte und deshalb hätte ich gerne das alles kombiniert in einer Datei ist.

Fällt ihnen da etwas ein? :O
 
Hast du schon mal gegoogled? ;)

Erster Treffer:

Code:
Option Explicit
Sub Delete_Old()
Dim A
Dim Dir_Path As String
Dir_Path = "D:\Alstom\Patrick\Travail"
Dim Masq_File, DIR_Result
Dim MyMONTH As String
'------------ LOOK IF ROOT  DIRECTORY  EXISTS
    Masq_File = Dir_Path & "\" & "*.*"
    DIR_Result = Dir(Masq_File, vbNormal)        '  Init  Dir_Result,  We  start  with only files
    While (DIR_Result <> "")
'------------   FILES EXIST   -----------------
        MyMONTH = Mid(DIR_Result, 15, 2) * 1
        A = Month(Date) - 1
        If (MyMONTH = Month(Date) - 1) Then
            Kill Dir_Path & "\" & DIR_Result        '   TO  REMOVE  the  FILE
        End If
        DIR_Result = Dir
    Wend
End Sub

https://www.mrexcel.com/forum/excel-questions/400518-vba-delete-files-folder-older-than.html

Ist natürlich ungetestet...
 
ja das hatte ich schon getestet, aber das hat irgendwie nicht so richtig funktioniert. Deshalb wollte ich lieber hier nachfragen.
 
Wo genau klappt das nicht?

Du müsstest eine Kopie des zu leerenden Ordners anlegen und dann darin das Makro mit F8 schrittweise durchgehen. Schwebe wenn du Zeile 15 erreicht hast mit der Maus über den Variablen in den Zeilen 13 und 14 und schau was da rauskommt. Wenn es stimmig ist muss nur noch die Berechnung in Zeile 15 passen und dann wird auch gelöscht.
Bemerkung: DIR liefert Files wild durcheinander und nicht der Reihe nach.

CN8
 
Hallo Zusammen,

ich habe das Problem wie folgt gelöst. Würde aber bei einer Änderung noch einmal eure Hilfe benötigen. Erstmal der funktionierende Code:

Code:
Sub Prüfung(StartFolder As String, Pattern As String, _
    DoSubfolders As Boolean, ByRef colFiles As Collection)

    Dim f As String, DateiDatum As Date, DateiDatumVorher As String, sf As String, subF As New Collection, s
    Dim DateiPfad As String, Datum As Date
    
    If Right(StartFolder, 1) <> "\" Then StartFolder = StartFolder & "\"

    Datum = DateAdd("m", -1, Date)

    f = Dir(StartFolder & Pattern)
    Do While Len(f) > 0
        colFiles.Add StartFolder & f
        f = Dir()
        DateiPfad = StartFolder & f
        If Len(f) > 0 Then
            DateiDatumVorher = Left(f, Len(f) - 4)
            DateiDatum = Mid(DateiDatumVorher, Len(DateiDatumVorher) - 9, Len(DateiDatumVorher))
                If DateiDatum < Datum Then
                    Kill DateiPfad
                End If
        End If
    Loop


End Sub

Code:
Sub PrüfungAktualität()

    Dim Pfad As String
    Dim colFiles As Collection
    Pfad = "U:\Test\"

    Set colFiles = New Collection
    Prüfung Pfad, "*.PDF", True, colFiles


End Sub

Das ist 100% nicht die effektivste Variante, aber Sie löst das Problem derzeit gut.

Nun zu meiner neuen Anfrage. In einem anderen Ordner sind mehrere Dateien hinterlegt mit folgendem Dateinamenschlüssel: "yyyy mm dd Name Ort.pdf". Das ich das Datum aus den 3 Stringteilen zusammenfüge wird bestimmt irgendwie klappen. Aber mein Problem ist, das in diesem Ordner immer nur die neuesten 15 Dateien von dem jeweiligen Dateidatum im Namen existieren sollen.

Wie kann ich das in VBA lösen?

Könnt ihr mir da irgendwie weiterhelfen?

Liebe Grüße

Mario
 
das in diesem Ordner immer nur die neuesten 15 Dateien von dem jeweiligen Dateidatum im Namen existieren sollen.

An was erkennt man besagte aktuelle 15 Dateien mit dem selben Datum im Namen? Oder willst du nur die jüngsten 15 Dateien behalten (mit eigenem Datum im Namen), wobei wir Lücken im Datum annehmen wollen (Wochenenden etwa), sodass einfach ›Jüngstes Datum - 15 Tage‹ nicht klappt?
Rein am Dateinamen also?

Dann würde ich primitiv von heute mit DIR und rückwärtsgezähltem Datum abzählen bis sich bei 15 bin. Anschließend (wie geschrieben traue ich DIR nicht was Reihenfolgen angeht) nochmal mit neuem DIR-Start durchackern und alles löschen was älter als das gefundene 15. Datum ist.

CN8
 
Zurück
Oben