ich programmiere eine Anwendung (Import.xlsm), in der der Anwender zunächst ein oder mehrere Dateien auswählt, die in der Folge dann ausgelesen werden sollen. Das mit dem Ansteuern der Dateien und das Auslesen klappt auch problemlos.
In jeder Importdatei verteilen sich die Informationen auf zwei verschiedene Tabellen, und ich muss mittels do-loop die entsprechenden Daten zueinanderbringen (die Details erspare ich euch). Ich könnte diese Zuordnung erheblich beschleunigen, wenn ich eine der Tabellen vorher sortiere.
Ich habe nun zunächst innerhalb einer dieser Datentabellen mittels Aufzeichnungsmodus mir einen Basiscode erstellt:
ActiveWorkbook.Worksheets("Tabelle1").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("Tabelle1").Sort.SortFields.Add2 Key:=Range("Z2:Z580"), SortOn:= _
xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
ActiveWorkbook.Worksheets("Tabelle1").Sort.SortFields.Add2 Key:=Range("AA2:AA580"), SortOn:= _
xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
With ActiveWorkbook.Worksheets("Tabelle1").Sort
.SetRange Range("A1:AO580")
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
Den kann ich so direkt nicht verwenden, weil ich ja nicht innerhalb der Datei sortiere, sondern "ferngesteuert".
Mein Import-Programm sieht (auf die nötigen Zeilen gekürzt) so aus:
Set wkbImport = objXLSession.Workbooks.Open(Filename:=(filename), UpdateLinks:=0, Password:=" _
beispiel", WriteResPassword:="beispiel")
Set wksBasisliste = wkbImport.Sheets("Tabelle1")
with Basisliste
Der Sheet, den ich steuern will, ist also dem Objekt "Basisliste" zugeordnet. An der Stelle, wo der Aufzeichnungsmodus die Tabelle ActiveWorkbook.Worksheets("Tabelle1") vergeben hat, greift also das "With".Meine Version sieht so aus:
.Sort.SortFields.Clear
.Sort.SortFields.Add2 Key:=Range("Z2:Z580"), SortOn:=xlSortOnValues, Order:=xlAscending, _
DataOption:=xlSortNormal
.Sort.SortFields.Add2 Key:=Range("AA2:AA580"), SortOn:=xlSortOnValues, Order:=xlAscending, _
DataOption:=xlSortNormal
.Sort.SetRange Range("A1:AO580")
.Sort.Header = xlYes
.Sort.MatchCase = False
.Sort.Orientation = xlTopToBottom
.Sort.SortMethod = xlPinYin
.Sort.Apply
Ich bekomme allerdings, und das ist mein Problem, bei Ausführung der zweiten Zeile den Fehler "ungültiger Prozessaufruf".
Ich habe im Netz schon mal geforscht und einen andere Schreibweise gefunden (Range-Objekt und Key und Key2), aber da habe ich das Problem, dass die Tabelle hierbei scheinbar nur "virtuell" sortiert wird. Die Suche dauert genauso lange wie vorher.
Vielen Dank im voraus!
Hans-Jürgen