Excel 2010 mit VBA sortieren ?
Hallo miteinander,
Ich habe die Aufgabe mit Excel einen Dateiordner auszulesen und diese in Excel nach 2 Kriterien in 2 Spalten zu sortieren.
Als absoluter Vollleie konnte ich mit Hilfe des Internets und ein paar hilfsbereiten User von diesem Forum nun geschafft den Ordner auszulesen.
Die Sortierung nach den 2 Spalten wollte ich mit Hilfen von Formeln durchführen was bei meinem Text auch funktioniert hat.
Für das bessere Verständnis
In der Tabelle 2 werden die Dateinamen aufgelistet und in der Tabelle 1 die sortierte Liste.
Dies hat in meinem Test funktioniert.
Wenn ich jedoch die Excel-Datei schliesse und wieder öffne, braucht Ecxel über 30 Minuten um die Datei zum öffnen.
Ich muss dazu sagen das ich nach 30 Minuten abgebrochen habe,
Ich vermute das das Macro das die Dateiliste erstellt einen komflikt mit der Formel in der Tabelle 1 bekommt.
Das die Formel jedesmall wenn eine neue Datei dazukommt wieder von vorne beginnt mit der Berechnung.
Deshalb meine Frage, kann die Sortierung der Dateien direkt in VBA-Code während dem einlesen gemacht werden ?
Hier mein Code der die Dateinamen in Excel schreibt.
Das auslesen der 2500 Dateien erfolgt in ca. 10 Sek.
Wäre echt super wenn mir jemand helfen könnte.
Andy
Ich habe die Aufgabe mit Excel einen Dateiordner auszulesen und diese in Excel nach 2 Kriterien in 2 Spalten zu sortieren.
Als absoluter Vollleie konnte ich mit Hilfe des Internets und ein paar hilfsbereiten User von diesem Forum nun geschafft den Ordner auszulesen.
Die Sortierung nach den 2 Spalten wollte ich mit Hilfen von Formeln durchführen was bei meinem Text auch funktioniert hat.
Für das bessere Verständnis
In der Tabelle 2 werden die Dateinamen aufgelistet und in der Tabelle 1 die sortierte Liste.
Dies hat in meinem Test funktioniert.
Wenn ich jedoch die Excel-Datei schliesse und wieder öffne, braucht Ecxel über 30 Minuten um die Datei zum öffnen.
Ich muss dazu sagen das ich nach 30 Minuten abgebrochen habe,
Ich vermute das das Macro das die Dateiliste erstellt einen komflikt mit der Formel in der Tabelle 1 bekommt.
Das die Formel jedesmall wenn eine neue Datei dazukommt wieder von vorne beginnt mit der Berechnung.
Deshalb meine Frage, kann die Sortierung der Dateien direkt in VBA-Code während dem einlesen gemacht werden ?
Hier mein Code der die Dateinamen in Excel schreibt.
Das auslesen der 2500 Dateien erfolgt in ca. 10 Sek.
Sub Filelist()
Dim fs As Object
Dim fVerz As Object
Dim fDatei As Object
Dim fdateien As Object
Dim strDat As String
Dim Zeile As Integer
Set fs = CreateObject("scripting.FileSystemObject")
Set fVerz = fs.getFolder("\\10.20.50.200\archiv")
Set fdateien = fVerz.Files
For Each fDatei In fdateien
If InStr(fDatei, "") > 0 Then
Zeile = Zeile + 1
Sheets(2).Cells(Zeile, 1) = fDatei.Name
End If
Next fDatei
End Sub
Wäre echt super wenn mir jemand helfen könnte.
Andy
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 339180
Url: https://administrator.de/contentid/339180
Ausgedruckt am: 25.11.2024 um 03:11 Uhr
4 Kommentare
Neuester Kommentar
Servus,
da hast du mehrere Möglichkeiten. In deinem Fall mache ich das gerne so, dass ich die Dateiliste in ein Recordset-Objekt einlese dem man auch mehr als eine Eigenschaft der Datei hinterlegen kann, z.B. das Änderungsdatum der Datei. So kann man im Nachhinein die Liste im Voraus nach Wunsch sortieren und filtern.
Die zweite Möglichkeit ist das Sortieren über die üblichen Excel-Funktionen.
Ich werde hier mal beide Möglichkeiten veranschaulichen:
p.s. eine kurze Aufzeichnung mit dem Makro-Rekorder wäre doch eigentlich nicht viel verlangt gewesen ?! Er hätte dir zumindest schon mal den Weg gewiesen.
Grüße Uwe
da hast du mehrere Möglichkeiten. In deinem Fall mache ich das gerne so, dass ich die Dateiliste in ein Recordset-Objekt einlese dem man auch mehr als eine Eigenschaft der Datei hinterlegen kann, z.B. das Änderungsdatum der Datei. So kann man im Nachhinein die Liste im Voraus nach Wunsch sortieren und filtern.
Die zweite Möglichkeit ist das Sortieren über die üblichen Excel-Funktionen.
Ich werde hier mal beide Möglichkeiten veranschaulichen:
Methode "Recordset"
Sub WriteSortedListToSheet()
'work on sheet 1
With Sheets(1)
' get sorted list of filenames from directory
Set Files = GetSortedFileList("\\10.20.50.200\archiv")
r = 1
'write file names to sheet
While Not Files.EOF
.Cells(r, 1).Value = Files.Fields("name").Value
Files.MoveNext
r = r + 1
Wend
End With
End Sub
Function GetSortedFileList(strFolder)
Set objList = CreateObject("ADOR.Recordset")
Set fso = CreateObject("Scripting.Filesystemobject")
objList.Fields.Append "name", 200, 255
objList.Fields.Append "date", 7
objList.Open
For Each file In fso.GetFolder(strFolder).Files
objList.AddNew
objList("name").Value = file.Name
objList("date").Value = file.DateLastModified
objList.Update
Next
objList.Sort = "name"
Set GetSortedFileList = objList
Set fso = Nothing
Set objList = Nothing
End Function
Methode Sortieren über Excel-Methode Range.Sort
Du importierst deine Dateinamen wie gewohnt unsortiert und sortierst dann einfach den Bereich in dem die Namen stehen nach folgendem Schema (hier wird Spalte A des ersten Sheets sortiert)With Sheets(1)
.Columns(1).Sort .Columns(1), xlAscending
End with
Grüße Uwe
Zitat von @dressa:
Das mit dem Makro-Recorder habe ich natürlich schon probiert, aber der hat das nicht geschnallt was ich gemacht habe.
Schade.Das mit dem Makro-Recorder habe ich natürlich schon probiert, aber der hat das nicht geschnallt was ich gemacht habe.
Weiss auch nicht warum gerade der wichtigste Teil nicht da ist
? Vielleicht das nächste mal sich vorher den Text nochmal ansehen bevor man ihn postet. Immerhin machen sich hier Leute Gedanken und opfern Ihre Zeit für Leute wie dich denen es anscheinend zu schwer fällt mal 2-3 Stunden in der VBA-Referenz zu lesen und dann nach knapp 2 Wochen ohne Rückmeldung wieder antanzen. Schade .Es gibt Dateien mit dem Namen.
20170404_002.html
20170404_003.html
20170405_002.html
20170406_002.html
20170406_003.html
usw.
Meine Sortierung sollte nun so funktionieren, das in der Spalte B alle File mit xxxx_002.html drin stehen
und in der Spalte C alle File mit xxxx_003.html drin stehen.
Ich habe das mit Excel Befehlen gemacht.
Was aber eben dazu führt das das Excel zwar berechnet aber in einer Schleife hängen bleibt.
Dafür gibt es im VBA-Editor Breakpoints und den Debugger der dich den Code Step by Step ausführen, und die Zustände der Variablen beobachten lässt. Man muss die Tools nur nutzen, dazu sind sie da!20170404_002.html
20170404_003.html
20170405_002.html
20170406_002.html
20170406_003.html
usw.
Meine Sortierung sollte nun so funktionieren, das in der Spalte B alle File mit xxxx_002.html drin stehen
und in der Spalte C alle File mit xxxx_003.html drin stehen.
Ich habe das mit Excel Befehlen gemacht.
Was aber eben dazu führt das das Excel zwar berechnet aber in einer Schleife hängen bleibt.
Deshalb will ich es eben mit VBA probieren.
Für das obige erste Beispiel einfach die erste Funktion so abändern (die Function gehört natürlich immer noch dazu, die bleibt aber gleich, deswegen poste ich sie nicht erneut.):Sub WriteSortedListToSheet()
On Error Resume Next
Dim col As Integer
'work on sheet 1
With Sheets(1)
' get sorted list of filenames from directory
Set Files = GetSortedFileList("\\10.20.50.200\archiv")
r = 1
'write file names to sheet
While Not Files.EOF
'Spalte aus dem Dateinamen ermitteln
col = Int(Split(Split(Files.Fields("name").Value, "_", 2, 1)(1), ".", 2, 1)(0))
If Err.Number <> 0 Then
MsgBox "Dateiname '" & Files.Fields("name").Value & "' konnte keiner Spalte zugeordnet werden!", vbExclamation
Err.Clear
Else
'Dateiname in nächste freie Zeile der jeweiligen Spalte schreiben
.Cells(Rows.Count, col).End(xlUp).Offset(1, 0).Value = Files.Fields("name").Value
End If
'nächster Name
Files.MoveNext
Wend
End With
End Sub
Grüße Uwe