Dein Key2 ist "" dadurch Folgefehler, oder?
Das sollte eigentlich keine Auswirkungen haben, da es sich bei den meisten der Parameter um Optionale Parameter handelt.
Ich wuerde mal folgendes versuchen.
call ApplicationObject.Selection.Sort(xlSheet.Columns("B"), xlAscending , "", xlSheet.Columns("A"), xlAscending , xlYes,1, False, xlTopToBottom)
Andreas
Du musst für Key1 und Key2 die erste Zelle der jeweiligen zu sortierenden Spalte angeben.
Also:
Dim xlsheet As Variant
Dim r as Variant
Set xlsheet = xl.Workbooks(1).ActiveSheet
Set r = xl.Range("A2","D" & Cstr(row))
'Sortiere
r.Sort xlSheet.Cells(1, 2), xlAscending , "", xlSheet.Cells(1, 1), xlAscending , xlYes,1, False, xlTopToBottom
Sorry! Das wird auch so nicht funktionieren, da dein Bereich von A2 nach Dx geht. ^^
So sollte es funktionieren:
Dim xlsheet As Variant
Dim r as Variant
Set xlsheet = xl.Workbooks(1).ActiveSheet
Set r = xl.Range("A2","D" & Cstr(row))
'Sortiere
r.Sort r.Cells(1, 2), xlAscending , "", r.Cells(1, 1), xlAscending , xlYes,1, False, xlTopToBottom
Guten Abend,
erstmal vielen Dank für die Tipps. Habe sie alle ausprobiert, aber die Fehlermeldung bleibt immer die selbe.
Überspringe die Sortierzeile momentan mit einem 'On Error Resume Next' und lande dann im Excelsheet.
Habe mit dem Makrorekorder in Excel das Markieren und Sortiern nochmal aufgezeichnet und versucht, den Code umzusetzen, aber irgendwie klappt es nicht. Es kommt immer die o.g. Meldung.
Das liefert Excel:
Columns("A:D").Select
Selection.Sort Key1:=Range("B2"), Order1:=xlAscending, Key2:=Range("A2") _
, Order2:=xlAscending, Header:=xlGuess, OrderCustom:=1, MatchCase:= _
False, Orientation:=xlTopToBottom, DataOption1:=xlSortNormal, DataOption2 _
:=xlSortNormal
Das Markieren klappt problemlos, egal ob über Columns oder 'Set r = xl.Range("A2","D" & Cstr(row))' oder über 'xl.Range("A2","D" & Cstr(row)).Select'. Bei der Anzeige in Excel sind genau die Zellen/Spalten markiert.
Nur nicht sortiert, sondern in der Reihenfolge wie sie in Notes halt kommen.
Bin ratlos und höre für heute auf.
Schönen Abend,
Axel
Ich hatte ein ähnliches Problem. Habe es so gelöst, dass ich das VBA-Makro "sortieren" in Excel gespeichert habe:
Sub sortieren()
Selection.Sort Key1:=Range("A3"), Order1:=xlAscending, Key2:=Range("B3") _
, Order2:=xlDescending, Key3:=Range("E3"), Order3:=xlAscending, Header _
:=xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
End Sub
und in Notes per
ExcelApplicationObject.run "sortieren"
starte.
Bedingung dafür ist allerdings natürlich, dass Du mit einer festen Vorlage arbeitest.
also ich war da vorhin etwas voreilig.
Kann es sein, dass deine Überschriften in Zeile 1 stehen? Wenn ja, liegt es an dem xlyes in Verbindung damit, dass du erst ab Zeile 2 markierst, glaube ich. Wenn du da ein xlguess draus machst, sollte es klappen.
Habs eben mal mit nem Agenten probiert:
Dim ex As Variant
Const xlAscending = 1
Const xlGuess = 0
Const xlTopToBottom = 1
Set ex = getobject(,"Excel.Application")
ex.activesheet.Range("A2","D7").Select
Call ex.Selection.Sort(ex.Columns("B"), xlAscending, ex.Columns("A"), , xlAscending, , , xlGuess, 1, False, xlTopToBottom)
Gruß
Demian
PS: Alternativ halt ab A1 markieren.
Guten Abend,
danke für die Tipps. Anhand der drei von meinem Namensvetter eingefügten Links bin ich nochmal durch die VBAHilfe und habe die Formel überarbeitet.
Jetzt wird richtig sortiert.
Hier das Ergebnis:
Call xl.Selection.Sort ( xlsheet.Columns("B"), xlAscending, xlsheet.Columns("A"),,xlAscending,,,xlYes,1,False)
Kaum ist die Tabelle fertig, zeigt sich das nächste Problem:
Ans Ende kommen Summenfunktionen, die die Spalten aufsummieren sollen. Das Eintragen klappt, nur kommt immer #NAME? bei Excel raus. In den Feldern steht es richtig drin.
Gebe es für jetzt auf und gehe ins Bett.
Falls jemand eine Idee hat, hier der Codeteil:
xlWbk.ActiveSheet.Cells(row, 3)= {=Summe(C2:C} & row-1 & ")"
xlWbk.ActiveSheet.Cells(row, 4)= {=Summe(D2:D} & row-1 & ")"
xl.Columns("C:D").Select
xl.Selection.NumberFormat = "#.0"
Habe es auch schon mit der Formula-Methode probiert, ohne Ergebnis.
Gute Nacht allerseits,
Axel