用dynamic范围和customOrder excelsortingmacros

我试图做一个多级sortingmacros,而行的数量是dynamic的。 我一直在搞一些testing数据,试图让它工作,但是我不断从Excel中获得1004运行时错误。 希望第二双眼睛能帮助解决这个问题。

这里是testing数据

ABCD Num Status Junk Junk 1 Open 1 1 2 Open 2 2 3 Closed 3 3 3 Open 3 3 4 Open 4 4 6 Open 6 6 8 Open 8 8 8 Open 8 8 34 Open 34 34 456 Open 456 456 5 Closed 5 5 853 Open 853 853 2345Closed 2345 2345 234 Open 234 234 23 Closed 23 23 4 Open 4 4 76 Closed 76 76 345 Open 345 345 623 Closed 623 623 523 Open 523 523 4525Closed 4525 4525 6 Open 6 6 

这是我的macros

 Range("A1:D1").Select ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Clear ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Add _ Key:=Range("B1:B10"), SortOn:=xlSortOnValues, Order:=xlAscending, CustomOrder:= _ "Open,Closed", DataOption:=xlSortNormal ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Add _ Key:=Range("A1:A10"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal With ActiveWorkbook.Worksheets("Sheet1").Sort .Header = xlYes .MatchCase = False .Orientation = xlTopToBottom .SortMethod = xlPinYin .Apply End With 

另请参阅我有范围(“A1:A10”)的行,希望A10是最后一行。 所以我不确定要放在那里。

谢谢大家,

吉姆

将最后一行放入一个variables中,然后在范围名称中使用该variables,就像我在下面所做的那样。 我也清理了一下你的代码,使它更容易阅读,更高效。 你得到运行时错误,因为你错过了SetRange方法:

 Sub mySort() Dim lngLast As Long lngLast = Range("A" & Rows.Count).End(xlUp).Row On Error Go to Whoa! 'in honor of Siddhart Rout (I like that :)) With Worksheets("Sheet1").Sort .SortFields.Clear .SortFields.Add Key:=Range("B1:B" & lngLast), SortOn:=xlSortOnValues, Order:=xlAscending, CustomOrder:= _ "Open,Closed", DataOption:=xlSortNormal .SortFields.Add Key:=Range("A1:A1" & lngLast), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal .SetRange Range("A1:D" & lngLast) .Header = xlYes .MatchCase = False .Orientation = xlTopToBottom .SortMethod = xlPinYin .Apply End With On Error Go To 0 Exit Sub Whoa!: Msgbox "Error " & Err.Number & " " & Err.Description, vbOkOnly End Sub