Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

die zwei neuesten Dateien behalten, Rest löschen

Forumthread: die zwei neuesten Dateien behalten, Rest löschen

die zwei neuesten Dateien behalten, Rest löschen
04.02.2019 09:15:34
Luisa
Guten Morgen :)
Ich erstelle per VBA ein Backup eines Tabellenblatts. Da das irgendwann sehr viele werden würden, möchte ich immer nur die 2 (oder x) neuesten behalten und die anderen Dateien löschen (bzw. wenn drei (x+1) Dateien existieren, die älteste löschen)
Ich suche nach einem VBA Ansatz mit dem ich das Problem lösen kann. Bei meiner Google Recherche habe ich nur Ansätze gefunden, die Dateien, die älter als eine bestimmte Zeit sind löschen...
Die Dateien sind eindeutig benannt: Backup_*Jahr*_*Monat*_*Tag* und ich weiß, wie man Dateien über einen eindeutigen Namen löscht.
Ein Ansatz würde mir schon mal reichen. Kann selbst noch ein bisschen experimentieren ;)
Danke!
Luisa
Anzeige

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: die zwei neuesten Dateien behalten, Rest löschen
04.02.2019 09:28:12
Daniel
Hallo Luisa,
wenn du eine Möglichkeit gefunden hast, alles bis zu einem Zeitpunkt zu löschen - kannst du dann nicht einfach eine Abfrage machen, ab welchem Datum gelöscht werden soll? Sind dann zwar nicht unbedingt alle Dateien bis auf die letzten Zwei, wäre aber eine Option. Müsstest dann natürlich eine Sicherheit einbauen, dass nur bis zu einem gewissen Datum gelöscht werden darf, damit die neuesten Dateien nicht aus Versehen mit gelöscht werden!
Oder, wenn die Backups in regelmäßigen Abständen erfolgen, könntest du ja den Zeitpunkt, bis zu dem gelöscht werden soll, mit Heute() - X definieren?
Nur kurzes Brainstorming :)
Grüße
Daniel
Anzeige
AW: die zwei neuesten Dateien behalten, Rest löschen
04.02.2019 09:33:40
Luisa
Hallo Daniel (mal Wieder ;D)
Ich habe schon mehrere Abfragen am Ende und will den Nutzer nicht zu spammen.
Hatte grade einen anderen Ansatz, dazu müsste ich aber wissen, wie man die Anzahl der Dateien in einem Ordner ermittelt. Da eine Idee?
Und die Backups erfolgen nicht in regelmäßigen Abständen ;)
Danke!
Anzeige
Anzahl Dateien ermitteln gelöst, älteste Datei?
04.02.2019 10:13:16
Luisa
Hallo Jochen,
Habe schon was einfacheres gefunden:

ordner = "G:\Meine Ablage\Backup\" 'unbedingt mit "\" am Ende
datei = Dir(ordner & "*.*")
While datei  ""
anzahl = anzahl + 1
datei = Dir
Wend
MsgBox anzahl & " Datei(en) gefunden"
Jetzt suche ich nur noch eine Möglichkeit, den Namen der ältesten Datei in dem Ordner herauszufinden.
Anzeige
AW: älteste Datei?
04.02.2019 10:50:47
JoWE
so; habe ich von Phelan XLPH (2009)
Sub FName_oldestFile()
Range("A1") = OldestOrYoungestFile("C:\Daten")
End Sub

Function OldestOrYoungestFile(ByVal strPath As String, _
Optional blnOldest As Boolean = True, _
Optional strFileSuffix As String = "*.*", _
Optional ByVal iRank As Integer = 1) As Variant
Dim strFileName     As String
Dim astrFilename()  As String
Dim dblDatum        As Double
Dim adblDatum()     As Double
Dim intIndex        As Integer
If Right$(strPath, 1)  "\" Then strPath = strPath & "\"
strFileName = Dir(strPath & strFileSuffix)
Do Until strFileName = vbNullString
ReDim Preserve astrFilename(intIndex)
astrFilename(intIndex) = strFileName
ReDim Preserve adblDatum(intIndex)
adblDatum(intIndex) = FileDateTime(strPath & strFileName)
Debug.Print strFileName, FileDateTime(strPath & strFileName)
intIndex = intIndex + 1
strFileName = Dir()
Loop
If intIndex > 0 Then
With WorksheetFunction
If blnOldest Then
dblDatum = .Small(adblDatum, iRank)
Else
dblDatum = .Large(adblDatum, iRank)
End If
strFileName = astrFilename(.Match(dblDatum, adblDatum, 0) - 1)
End With
OldestOrYoungestFile = Array(strFileName, CDate(dblDatum))
End If
End Function
Gruß
Jochen
Anzeige
AW: älteste Datei?
04.02.2019 13:36:21
Luisa
Verstehe nicht so wirklich, was da passiert...
;
Anzeige
Anzeige

Infobox / Tutorial

Die neuesten Dateien in Excel VBA behalten und alte löschen


Schritt-für-Schritt-Anleitung

Um in Excel VBA die zwei neuesten Dateien in einem bestimmten Ordner zu behalten und die älteren zu löschen, kannst Du folgenden Code verwenden:

  1. Ordner definieren: Lege den Pfad zu Deinem Backup-Ordner fest.
  2. Dateien zählen und älteste Datei ermitteln: Verwende VBA, um die Anzahl der Dateien zu zählen und die älteste Datei zu finden.
  3. Löschen der ältesten Dateien: Wenn die Anzahl der Dateien größer als zwei ist, lösche die ältesten Dateien.

Hier ist ein Beispielcode, der diese Schritte umsetzt:

Sub KeepLatestFiles()
    Dim ordner As String
    Dim datei As String
    Dim anzahl As Integer
    Dim oldestFile As Variant
    Dim i As Integer

    ordner = "G:\Meine Ablage\Backup\" ' Unbedingt mit "\" am Ende
    datei = Dir(ordner & "*.*")
    anzahl = 0

    ' Zähle die Dateien
    Do While datei <> ""
        anzahl = anzahl + 1
        datei = Dir
    Loop

    MsgBox anzahl & " Datei(en) gefunden"

    ' Wenn mehr als 2 Dateien, lösche die ältesten
    If anzahl > 2 Then
        For i = 1 To anzahl - 2
            oldestFile = OldestOrYoungestFile(ordner)(0)
            Kill ordner & oldestFile
        Next i
    End If
End Sub

Function OldestOrYoungestFile(ByVal strPath As String, _
Optional blnOldest As Boolean = True) As Variant
    ' (Hier den Code aus dem Forum einfügen, um die älteste Datei zu ermitteln)
End Function

Häufige Fehler und Lösungen

  • Fehler: "Dateipfad nicht gefunden"
    Lösung: Stelle sicher, dass der Pfad korrekt angegeben ist und der Ordner existiert.

  • Fehler: "Zugriff verweigert"
    Lösung: Überprüfe die Berechtigungen für den Ordner. Du benötigst Schreibrechte, um Dateien zu löschen.

  • Fehler: "Kein gültiger Dateiname"
    Lösung: Achte darauf, dass die Dateien im angegebenen Format benannt sind (z.B. Backup_YYYY_MM_DD).


Alternative Methoden

Wenn Du keine VBA-Lösung verwenden möchtest, kannst Du auch manuell die Dateien im Ordner sortieren und die ältesten löschen. Eine weitere Option ist die Verwendung von Power Query, um die Dateien zu laden und zu filtern.


Praktische Beispiele

Angenommen, Du hast folgende Backupdateien im Ordner:

  • Backup_2023_01_01.xlsx
  • Backup_2023_01_02.xlsx
  • Backup_2023_01_03.xlsx
  • Backup_2023_01_04.xlsx

Mit dem obigen VBA-Skript bleiben nur die neuesten zwei Dateien (Backup_2023_01_03.xlsx und Backup_2023_01_04.xlsx). Die ältesten Dateien werden gelöscht.


Tipps für Profis

  • Automatisierung: Du kannst das Skript in ein Arbeitsblatt-Ereignis einfügen, um es automatisch auszuführen, wenn Du die Datei öffnest.
  • Fehlerbehandlung: Füge eine Fehlerbehandlung hinzu, um sicherzustellen, dass das Skript nicht bei einem unerwarteten Fehler stoppt.
  • E-Mail-Benachrichtigung: Du kannst das Skript erweitern, um eine E-Mail zu senden, wenn Dateien gelöscht werden, um Dich über Änderungen zu informieren.

FAQ: Häufige Fragen

1. Wie kann ich die Anzahl der zu behaltenden Dateien ändern?
Du kannst die Anzahl in der Bedingung If anzahl > 2 Then im Hauptskript anpassen.

2. Funktioniert das Skript in Excel 2016?
Ja, das Skript ist mit Excel 2016 und späteren Versionen kompatibel.

3. Was passiert, wenn ich versehentlich die falschen Dateien lösche?
Das Skript löscht Dateien unwiderruflich. Es ist ratsam, vor dem Ausführen eine Sicherungskopie des Ordners zu erstellen.

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