Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1776to1780
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

Sortierung einer anderen Mappe

Sortierung einer anderen Mappe
19.08.2020 13:49:02
Hans-Jürgen
Hallo Wissende,
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

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Sortierung einer anderen Mappe
19.08.2020 13:59:02
Daniel
Hi
Wenn man in einem Makro andere Mappen bearbeiten will, muss man immer vollständig referenzieren, dh. jedem Range, Fells, Columns oder Rows Workbook und Worksheet voranstellen.
Das gilt auch dann, wenn Range oder Cells innerhalb anderer Funktionen stehen, wo das bereits angegeben wurde.
Gruß Daniel
AW: Sortierung einer anderen Mappe
19.08.2020 14:18:52
Werner
Hallo,
so:
With Basisliste
.Sort.SortFields.Clear
.Sort.SortFields.Add Key:=.Range("Z2:Z580"), SortOn:= _
xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
.Sort.SortFields.Add Key:=.Range("AA2:AA580"), SortOn:= _
xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
With .Sort
.SetRange Basisliste.Range("A1:AO580")
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.Apply
End With
End With
Offensichtlich hast du Office 365, da zeichnet der Makrorekorder .Sort.SortFields.Add2 auf.
Die 2 habe ich in deinem Code entfernt, sonst kriegst du Probleme, wenn du den Code auf einer niedrigeren Excel-Version laufen lässt.
Die Sort Methode .Sort.SortMethod = xlPinYin kannst du weglassen - außer du willst Chinesische Schriftzeichen sortieren.
Gruß Werner
Anzeige
AW: Sortierung einer anderen Mappe
19.08.2020 15:39:19
Hans-Jürgen
Hallo Werner und Daniel,
vielen Dank, so klappt es (fast).
Werner, ich habe deinen Code 1:1 übernommen. Über die Keyzeilen ist die Anwendung anstandslos drübergegangen, ist aber bei deiner Zeile
.SetRange Basisliste.Range("A1:AO580")
hängengeblieben.
Ich habe dann den Hinweis von Daniel mit der vollständigen Referenzierung umgesetzt und an dieser Stelle das "Basisliste" durch die Quellangabe ersetzt. Funktioniert. Euch beiden recht herzlichen Dank!
Viele Grüße
Hans-Jürgen
P.S.: Ich wusste gar nicht, dass man innerhalb eines With noch ein weiteres With aufmachen kann. Deswegen hatte ich das so umständlich umgebaut. Gut, dass ein doppeltes With die Lesbarkeit nicht erhöht, ist auch klar ;-))
Anzeige
Gerne u. Danke für die Rückmeldung. o.w.T.
19.08.2020 15:44:20
Werner

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige