使用动态范围和customOrder excel对宏进行排序

使用动态范围和customOrder excel对宏进行排序,excel,vba,Excel,Vba,我试图制作一个多级排序宏,而行的数量是动态的。我一直在胡乱处理一些测试数据,试图让它正常工作,但我一直从Excel中收到1004个运行时错误。希望第二双眼睛能帮你解决这个问题 这是测试数据 A B C D Num Status Junk Junk 1 Open 1 1 2 Open 2 2 3 Closed 3 3 3 Open 3 3 4 Open 4

我试图制作一个多级排序宏,而行的数量是动态的。我一直在胡乱处理一些测试数据,试图让它正常工作,但我一直从Excel中收到1004个运行时错误。希望第二双眼睛能帮你解决这个问题

这是测试数据

A       B        C      D
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
这是我的宏

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是最后一行。所以我不知道该放什么

谢谢大家


Jim

将最后一行放入变量,然后在范围名称中使用该变量,就像我在下面所做的那样。我还对您的代码进行了一些清理,使其更易于阅读,效率更高。由于缺少
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

Excel错误1004意味着您的VBA代码抛出了一个错误,但您忽略了使用错误处理程序捕获它。您应该在Excel VBA中始终有一个错误hanlder,以避免此问题和许多其他问题!。在错误处理程序中输入
ON ERROR…
语句,然后输入
MsgBox“ERROR#”&Err.Number&“:”&Err.Description,vbOKOnly
,查看实际错误。很好,但Excel VBA外部入口点应始终具有错误处理程序。获取运行时438对象不支持第
行的方法错误。SortRange Range(“A1:D”&lngLast)
@Jim。。。确保该行显示的是
.SetRange
,而不是
.SortRange