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

Dateien eines Ordners - alphabetischer Reihenfolge

Dateien eines Ordners - alphabetischer Reihenfolge
Holger
Hallo,
der folgende VBA-Code liest eine Zelle aus allen Dateien eines Ordners aus und schreibt diese in einer Datei untereinander, was auch funktioniert.
Leider werden die Dateien in Reihenfolge des Speicherdatums ausgelesen, beginnend mit dem jüngsten.
Wie muss ich das anpassen, damit die Dateien des Ordners in alphabetischer Reihenfolge ausgelesen werden?
Vielen Dank im Voraus für eine hilfreiche Antwort.
Gruß
Holger

Sub datenAusDateien()
Dim strPath As String, strFile As String, strTab As String, strRef As String
Dim lngNext As Long
strPath = "E:\Forum" 'verzeichnis
strPath = IIf(Right(strPath, 1) = "\", strPath, strPath & "\")
strTab = "Tabelle1" 'Tabellenname
strRef = "B5" 'Zelladresse
lngNext = 4
strFile = Dir(strPath & "*.xls*", vbNormal)
On Error Resume Next
With Sheets("Planung")
Do While strFile  ""
.Cells(lngNext, 7).Formula = "='" & strPath & "[" & strFile & "]" & strTab & "'!" &  _
strRef
.Cells(lngNext, 7) = .Cells(lngNext, 7).Value
lngNext = lngNext + 1
strFile = Dir
Loop
End With
End Sub

AW: Dateien eines Ordners - alphabetischer Reihenfolge
30.10.2011 11:14:39
Josef

Hallo Holger,
dazu benötigt man eine komplett anderen Code. Warum sortierst du die Spalte anschließend nicht einfach?

« Gruß Sepp »

AW: Dateien eines Ordners - alphabetischer Reihenfolge
30.10.2011 13:27:52
Reinhard
Hallo Sepp,
wieso einen komplett anderen Code?
Holger muß doch nur in der Schleife strFile in eine Hilfsspalte schreiben und nach dieser Spalte 7 sortieren.
Wenn das seine tabellnstrukrur zwerhackt, dann halt erstmal in einem temporären Hilfsblatt die Formeln in a eintragen, StrFile in B und nach B sortieren und in a die Originaltab übertragen.
Sooo langsam ist das nicht.
Oder sehe ich da was falsch?
(Das ist der Grund warum ich nachfrage)
Gruß
Reinhard
Anzeige
AW: Dateien eines Ordners - alphabetischer Reihenfolge
30.10.2011 14:55:54
Josef

Hallo Reinhard,
"komplett anderer Code" bezieht sich auf das auslesen der Dateien.
Man kann mit entsprechendem Code, die Dateien gleich nach einem bestimmten Kriterium sortiert einlesen.

« Gruß Sepp »

Danke dir :-)                o.w.T
31.10.2011 09:11:33
Reinhard

Arraylist.sort-->.ToArray
30.10.2011 11:20:30
ransi
HAllo
Wie man die Dateien in Alphabetischer Reihenfolge ausliest weiß ich nicht.
Aber:
Alle Dateien in eine Arraylist auslesen.
Die Arraylist sortieren.
Die Elemente der Arraylist verformeln.
Schau es dir mal an:

Option Explicit

Sub Test()
    Dim objAL As Object
    Dim objFSO As Object
    Dim strPath
    Dim strFile
    Dim vntFiles As Variant
    Dim L As Long
    Set objAL = CreateObject("System.Collections.Arraylist")
    Set objFSO = CreateObject("Scripting.FilesystemObject")
    
    strPath = "E:\Forum" 'verzeichnis
    With objAL
        For Each strFile In objFSO.getfolder(strPath).Files 'Alle Dateien auslesen
            Select Case LCase(objFSO.getextensionname(strFile))
                Case "xls", "xlsx", "xla", "xlsm" 'nur Excel Dateien betrachten
                    .Add strFile.Path 'Datei in die Arraylist aufnehmen
            End Select
        Next
        .Sort 'ArrayList sortieren
        vntFiles = .toArray 'ArrayList in ein Array wegschreiben
    End With
    
    'Ausgeben
    For L = LBound(vntFiles) To UBound(vntFiles)
        MsgBox vntFiles(L) 'Die Formel bekommst du selber hin ?
    Next
    
    
End Sub


ransi
Anzeige
Und weil ich Esel, dass mit den Formeln ...
30.10.2011 11:53:07
Josef

... nicht gelesen habe, hier der Code von Ransi mit dem einfügen der Formeln.

Sub Test()
  Dim objAL As Object, objFSO As Object, objFile As Object
  Dim strPath As String, strTab As String, strRef As String
  Dim vntFiles As Variant
  Dim lngIndex As Long, lngNext As Long
  
  Set objAL = CreateObject("System.Collections.Arraylist")
  Set objFSO = CreateObject("Scripting.FilesystemObject")
  
  strPath = "E:\Forum" 'verzeichnis
  strPath = IIf(Right(strPath, 1) = "\", strPath, strPath & "\")
  strTab = "Tabelle1" 'Tabellenname
  strRef = "B5" 'Zelladresse
  lngNext = 4
  
  With objAL
    For Each objFile In objFSO.getfolder(strPath).Files 'Alle Dateien auslesen
      If LCase(objFSO.getExtensionName(objFile)) Like "xls*" Then .Add objFile.Name
    Next
    .Sort 'ArrayList sortieren
    vntFiles = .toArray 'ArrayList in ein Array wegschreiben
  End With
  
  For lngIndex = LBound(vntFiles) To UBound(vntFiles)
    vntFiles(lngIndex) = "='" & strPath & "[" & vntFiles(lngIndex) & "]" & _
      strTab & "'!" & strRef
  Next
  
  With Sheets("Planung").Cells(lngNext, 7).Resize(UBound(vntFiles) + 1, 1)
    .Formula = Application.Transpose(vntFiles)
    .Value = .Value
  End With
  
  Set objFile = Nothing
  Set objFSO = Nothing
  Set objAL = Nothing
End Sub




« Gruß Sepp »

Anzeige
AW: Und weil ich Esel, dass mit den Formeln ...
30.10.2011 13:47:26
Holger
Der VBA-Code funktioniert... :-)
Vielen Dank an alle die sich an der Lösung beteiligt haben.
PS:
Ich hatte vorher auch schon versucht die Dateien im Explorer anders zu sortieren, ohne Erfolg.
Ein sortieren der Werte nachträglich wäre nur dann sinnvoll, wenn ich nebendran zur Verbindung auch den Dateinamen hätte. Das wären dann 2 Hilfsspalten um die echte Spalte zu füllen. Wäre natürlich auch machbar gewesen,
aber so ists natürlich professionieller.
Vielen Dank nochmal.
AW: Dateien eines Ordners - alphabetischer Reihenfolge
30.10.2011 13:37:16
Daniel
Hi
ich vermute mal die DIR-Funktion liest die Daten in der Reihenfolge, wie du sie zuletzt im Dateiexplorer sortiert hast (bei mir ist die Reihenfolge nämlich alphabetisch.
aber es gibt für diesen Fall eine einfache lösung:
1. Schreibe erstmal die Formeln als Text in die Zellen (beispielsweise durch ein voranstellen von "xxx")
2. Sortiere dann die Texte mit der Sortierfunktion, da der Zellbezug als erstes steht, sollte richtig sortiert werden
3. Wandle dann die Texte in Formeln um, indem du einfach mit ERSETZEN die "xxx" entfernst. Den Rest erledigt dann Excel automatisch, da es die Zellinhalte nun wieder als Formeln erkennt und ensprechend reagiert.
Da du nur einfache Zellbezüge und keine komplexen Formeln hast, sollten keine Sprachprobleme zwischen VBA (englisch) und Excel (deutsch) zu erwarten sein.
hier der Code, die geänderten Zeilen sind Fett:

Sub datenAusDateien()
Dim strPath As String, strFile As String, strTab As String, strRef As String
Dim lngNext As Long
strPath = "d:\daten\excel" 'verzeichnis
strPath = IIf(Right(strPath, 1) = "\", strPath, strPath & "\")
strTab = "Tabelle1" 'Tabellenname
strRef = "B5" 'Zelladresse
lngNext = 4
strFile = Dir(strPath & "*.xls*", vbNormal)
On Error Resume Next
With Sheets(1)
Do While strFile  ""
.Cells(lngNext, 7).Formula = "xxx='" & strPath & "[" & strFile & "]"  _
& strTab & "'!" & strRef
.Cells(lngNext, 7) = .Cells(lngNext, 7).Value
lngNext = lngNext + 1
strFile = Dir
Loop
With Range(.Cells(4, 7), .Cells(lngNext - 1, 7))
.Sort key1:=.Cells(1, 1), order1:=xlAscending, Header:=xlNo
.Replace "xxx=", "=", xlPart
End With
Endd With
End Sub

Gruß Daniel
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige
Archiv - Verwandte Themen