Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1724to1728
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Einlesen der letzten 7 Dateien in einem Ordner

Einlesen der letzten 7 Dateien in einem Ordner
25.11.2019 10:57:12
Tobias
Guten Morgen,
habt ihr eine Idee wie man die 7 aktuellsten/letzten Dateien, welche in einem Ordner abgespeichert wurden, öffnen kann und die dann bearbeiten kann? Das Makro zum Bearbeiten habe ich bereits. Allerdings wird bis jetzt nur eine Datei geöffnet. Ich möchte aber eine Schleife haben, wo er im besten Fall sogar so viele Dateien einliest, wie der Benutzer in einer bestimmten Zelle vorgibt.
Beispiel:
Der Benutzer der in Tabellenblatt 1 in Zelle G6 "10" ein. Dann soll das Makro die 10 letzten Dateien aus einem Ordner einlesen.
Gibt es da eine Möglichkeit das zu realisieren?
Mfg
Tobias

10
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Einlesen der letzten 7 Dateien in einem Ordner
25.11.2019 14:08:02
volti
Hallo Tobias,
probier mal, ob das Ermitteln der x neuesten Dateien in einem Ordner so für Dich ok wäre.
Sub AnzahlDateiAusOrdnerEinlesen()
 Dim sDatei As String, sDateien(25, 1) As String, sPfad As String
 Dim Anzahl As Integer, Zeit As Variant, i As Integer, j As Integer
 Anzahl = Sheets("Tabelle1").Range$("$G$6").Value   'ggf. anpassen
 If Anzahl = 0 Then Anzahl = 7
 sPfad = "C:\Users\voltm\Desktop\"                  'anpassen
 sDatei = Dir$(sPfad & "*.*")                       'ggf. anpassen
 Do While sDatei <> ""
   Zeit = FileDateTime(sPfad & sDatei)
   Zeit = Mid$(Zeit, 7, 4) & Mid$(Zeit, 4, 2) & Left$(Zeit, 2) _
        & Mid$(Zeit, 12, 2) & Mid$(Zeit, 15, 2) & Right$(Zeit, 2)
   For i = 1 To Anzahl + 1
'Prüfen ob Datei neuer als bisherige Dateien
       If (Zeit <= sDateien(i, 1) And sDateien(i, 1) <> "") Or i = Anzahl Then
'Platz schaffen
          For j = 1 To i
           sDateien(j - 1, 0) = sDateien(j, 0)
           sDateien(j - 1, 1) = sDateien(j, 1)
          Next j
'Datei aufnehmen
          sDateien(i - 1, 0) = sPfad & sDatei
          sDateien(i - 1, 1) = Zeit
          Exit For
    End If
   Next i
   sDatei = Dir
 Loop
'Ausgeben bzw. Weiterverarbeiten der Dateien
 For i = Anzahl - 1 To 0 Step -1
   Debug.Print sDateien(i, 0)
   'code z.B. Workbook.open
 Next
End Sub

viele Grüße
Karl-Heinz

Anzeige
AW: Einlesen der letzten 7 Dateien in einem Ordner
26.11.2019 10:40:18
Tobias
Hallo Karl-Heinz,
Ich habe den Code jetzt versucht einzubauen aber irgendwie fehlt es mir dann doch an Wissen.
Wie verarbeite ich die Dateien dann vernüftig weiter? Und wie kann ich die aktuell geöffnete Datei sinnvoll ansprechen. Bisher habe ich das immer wie folgt gehandhabt:
Workbooks.Open Filename:="P:\Praxissemester\GFos-Daten E-Mail-Verteiler\RP_3611_4611*.xls"
lstrDatei = Dir("P:\Praxissemester\GFos-Daten E-Mail-Verteiler\RP_3611_4611*.xls")
Windows(lstrDatei).Activate
Wäre echt super wenn ich dazu nochmal eine Hilfe bekomme.
Mfg Tobias
Anzeige
AW: Einlesen der letzten 7 Dateien in einem Ordner
26.11.2019 11:55:04
volti
Hallo Tobias,
nach Start des Makros wird das Verzeichnis nach den gewünschten Dateien durchsucht und die neuesten Dateien im Array abgelegt.
Anschließend können die Dateien aus dem Array nacheinander abgerufen werden.
Ich habe nach öffnen der jeweiligen Datei diese in der Variabel WKb referenziert.
Diese kannst Du nun für Deine Zwecke verwenden oder einfach innerhalb im WITH-Bereich.
Durch Ansprache über die Referenzierung muss die Datei/Mappe auch nicht mehr unbedingt die aktive Mappe sein.
Sub AnzahlDateiAusOrdnerEinlesen()
 Dim sDatei As String, sDateien(25, 1) As String, sPfad As String
 Dim Anzahl As Integer, Zeit As Variant, i As Integer, j As Integer
 Dim WKb As Workbook
 Anzahl = Sheets("Tabelle1").Range$("$G$6").Value        'ggf. anpassen
 If Anzahl = 0 Then Anzahl = 7
 sPad = "P:\Praxissemester\GFos-Daten E-Mail-Verteiler\" 'ggf anpassen
 sDatei = Dir$(sPfad & "*.xls*")                         'Nur Excel-Dateien ggf. anpassen
'Alle Dateien entsprechend der Dir-Maske im Pfad durchgehen
 Do While sDatei <> ""
   If sDatei <> ThisWorkbook.Name Then
    Zeit = FileDateTime(sPfad & sDatei)
    Zeit = Mid$(Zeit, 7, 4) & Mid$(Zeit, 4, 2) & Left$(Zeit, 2) _
         & Mid$(Zeit, 12, 2) & Mid$(Zeit, 15, 2) & Right$(Zeit, 2)
    For i = 1 To Anzahl + 1
'Prüfen ob Datei neuer als bisherige Dateien
        If (Zeit <= sDateien(i, 1) And sDateien(i, 1) <> "") Or i = Anzahl Then
'Platz schaffen durch Verschieben der Einträge im Array
           For j = 1 To i
            sDateien(j - 1, 0) = sDateien(j, 0)
            sDateien(j - 1, 1) = sDateien(j, 1)
           Next j
'Datei und Zeit ins Array einfügen
           sDateien(i - 1, 0) = sPfad & sDatei
           sDateien(i - 1, 1) = Zeit
           Exit For
     End If
    Next i
   End If
   sDatei = Dir
 Loop
'öffnen der gefundenen Dateien, beginnend mit der neuesten Datei
 For i = Anzahl - 1 To 0 Step -1
   If sDateien(i, 0) <> "" Then
    Workbooks.Open Filename:=sDateien(i, 0)
    Set WKb = ActiveWorkbook                 'Workbook referenzieren
    With WKb
  'Mach was mit mir.....
  'MSGBOX .Sheets(1).Range("$A$1").value
  'MSGBOX Wkb.Sheets(1).Range("$A$1").value
     .Close SaveChanges:=False               'Schließen, ohne zu speichern
    End With
  End If
 Next
End Sub

Hoffe, jetzt ist es etwas klarer geworden, ansonsten melde Dich einfach noch mal hier.
Viele Grüße
Karl-Heinz

Anzeige
AW: Einlesen der letzten 7 Dateien in einem Ordner
26.11.2019 14:59:31
Tobias
Hallo Karl-Heinz,
Es funktioniert jetzt genau wie ich es haben wollte, auch wenn ich nicht genau weiß wie die Do While-Loop-Schleife arbeitet. Aber ist ja auch nicht weiter wichtig, hauptsache es funktioniert.
Vielen vielen Dank!
mfg Tobias
AW: Einlesen der letzten 7 Dateien in einem Ordner
26.11.2019 15:48:53
volti
Hallo Tobias,
schön, dass es funktioniert und in Deinem Sinne ist.
Vielen Dank für die Rückmeldung.
Hier doch noch mal eine kleine Anpassung, da u.U. die letzte Datei bei evtl. schon vollem Array von weiteren älteren überschrieben werden kann und so die letzte Datei nicht zu den neuesten gehören könnte.
Sub AnzahlDateiAusOrdnerEinlesen()
 Dim sDatei As String, sDateien(25, 1) As String, sPfad As String
 Dim Anzahl As Integer, Zeit As Variant, i As Integer, J As Integer
 Dim WKb As Workbook
 Anzahl = Sheets("Tabelle1").Range$("$G$6").Value        'ggf. anpassen
 If Anzahl = 0 Then Anzahl = 5
 sPad = "P:\Praxissemester\GFos-Daten E-Mail-Verteiler\" 'ggf anpassen
 sPfad = "C:\Users\voltm\Desktop\"
 sDatei = Dir$(sPfad & "*.xls*")                         'Nur Excel-Dateien ggf. anpassen
'Alle Dateien entsprechend der Dir-Maske im Pfad durchgehen
 Do While sDatei <> ""
   If sDatei <> ThisWorkbook.Name Then
    Zeit = FileDateTime(sPfad & sDatei)
    Zeit = Mid$(Zeit, 7, 4) & Mid$(Zeit, 4, 2) & Left$(Zeit, 2) _
         & Mid$(Zeit, 12, 2) & Mid$(Zeit, 15, 2) & Right$(Zeit, 2)
    For i = 0 To Anzahl
'Prüfen ob Datei neuer als bisherige Dateien
        If (Zeit <= sDateien(i + 1, 1) And sDateien(i + 1, 1) <> "") Or i = Anzahl Then
'Platz schaffen durch Verschieben der Einträge im Array
           If i > 0 Then
             For J = 1 To i
               sDateien(J - 1, 0) = sDateien(J, 0)
               sDateien(J - 1, 1) = sDateien(J, 1)
             Next J
'Datei und Zeit ins Array einfügen
             sDateien(i, 0) = sPfad & sDatei
             sDateien(i, 1) = Zeit
           End If
           Exit For
     End If
    Next i
   End If
   sDatei = Dir
 Loop
'öffnen der gefundenen Dateien, beginnend mit der neuesten Datei
 For i = Anzahl To 1 Step -1
   If sDateien(i, 0) <> "" Then
    Workbooks.Open Filename:=sDateien(i, 0)
    Set WKb = ActiveWorkbook                 'Workbook referenzieren
    With WKb
  'Mach was mit mir.....
  'MSGBOX .Sheets(1).Range("$A$1").value
  'MSGBOX Wkb.Sheets(1).Range("$A$1").value
     .Close SaveChanges:=False               'Schließen, ohne zu speichern
    End With
  End If
 Next
End Sub

viele Grüße
Karl-Heinz

Anzeige
AW: Einlesen der letzten 7 Dateien in einem Ordner
26.11.2019 15:53:25
volti
Ups,
habe vergessen meinen Pfad sPfad = "C:\Users\voltm\Desktop\" rauszunehmen. Müsstest Du noch kurz machen. :-)
AW: Einlesen der letzten 7 Dateien in einem Ordner
27.11.2019 08:45:46
Tobias
Hallo Karl-Heinz,
Irgendetwas scheint nicht zu funktionieren. Das makro ist bereits nach 2 sekunden durchgelaufen und bearbeitet wurde nichts. Der alte Code hat problemlos funktioniert. Ich hab keine Ahnung was da schief läuft weil er ja durchläuft und keine Fehlermeldung anzeigt.
mfg
Tobias
AW: Einlesen der letzten 7 Dateien in einem Ordner
27.11.2019 09:41:15
Tobias
Hab den Fehler jetzt gefunden. Bei Pfad fehlt das "f".
Glaube jetzt funktioniert es einwandfrei. Danke nochmal für deine Bemühung und dafür dass du nochmals drüber geschaut hast obwohl es nach meines Wissens einwandfrei funktioniert hat.
mfg
Tobias
Anzeige
AW: Einlesen der letzten 7 Dateien in einem Ordner
27.11.2019 10:05:23
Tobias
Eine Frage noch. Wie viele Dateien kann man damit maximal einlesen?
AW: Einlesen der letzten 7 Dateien in einem Ordner
27.11.2019 16:35:20
volti
Sorry Tobias,
das war mein Fehler mit dem falschen Text der Variablen. Aber hast es ja gefunden.
Im Prinzip ist die Anzahl der Dateien egal, allerdings habe ich das Array auf 25 gedimt.
Bei mehr als 25 Dateien musst Du das anpassen.
viele Grüße
Karl-Heinz

305 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige