Hi,
danke, dass war der super Tipp.
Es funktioniert jetzt wie es soll.
Zuerst Spalte A und dann Spalte B nach Liste. Cool!
Und die benuterdefinierte Liste darf kein Array sein.
Weiter ist dies auch nicht notwendig:
$oExcel.AddCustomList($aSortArray)
Das funktionierende Script:
AutoIt
Local $a[][] = [['Name', 'ID'], ['Anton', 'AB'], ['Anton', 'A'], ['Berta', 'AA'], _
['Anton','B'], ['Anton', 'C'], ['Anton', 'AC'], _
['Berta', 'AB'], ['Berta', 'A'], ['Anton', 'AY'], ['Berta', 'B'], ['Berta', 'C'], ['Berta', 'AC']]
Local $oAppl = _Excel_Open(Default, Default, Default, Default, True)
Local $sWorkbook = "C:\Temp\Excel_Sort_by_CustomOrder.xlsx"
Local $oWorkbook = _Excel_BookNew($oAppl, 1)
_Excel_RangeWrite($oWorkbook, Default, $a, "A1")
Local $SortOrder1
Local $SortOrder2 = "A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,AA,AB,AC,AD,AE,AF,AG,AH,AI,AJ,AK,AL,AM,AN,AO,AP,AQ,AR,AS,AT,AU,AV,AW,AX,AY,AZ"
$iHeader = $xlYes
$bMatchcase = False
$iOrientation = $xlSortColumns
$iOrder1 = $xlAscending
$iOrder2 = $xlAscending
$vWorksheet = $oWorkbook.ActiveSheet
$vRange = $vWorksheet.Usedrange
$vKey1 = $vWorksheet.Range("A:A")
$vKey2 = $vWorksheet.Range("B:B")
$DataOption1 = 0 ;xlSortNormal = 0 oder xlSortTextAsNumbers = 1
$DataOption2 = 0 ;xlSortNormal = 0 oder xlSortTextAsNumbers = 1
$vWorksheet.Sort.SortFields.Clear
$vWorksheet.Sort.SortFields.Add($vKey1, $xlSortOnValues, $iOrder1, $SortOrder1, $DataOption1)
$vWorksheet.Sort.SortFields.Add($vKey2, $xlSortOnValues, $iOrder2, $SortOrder2, $DataOption2)
$vWorksheet.Sort.SetRange($vRange)
$vWorksheet.Sort.Header = $iHeader
$vWorksheet.Sort.MatchCase = $bMatchcase
$vWorksheet.Sort.Orientation = $iOrientation
$vWorksheet.Sort.Apply
_Excel_BookSaveAs($oWorkbook, $sWorkbook, Default, True)
_Excel_Close($oAppl)
MsgBox(0, "", "Richtig sortiert?")
Alles anzeigen