excel - 具有动态范围和 customOrder excel 的排序宏

标签 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       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

另请参阅我有 Range("A1:A10") 的行,希望 A10 成为最后一行。所以我不确定该放什么。

谢谢大家,

吉姆

最佳答案

将最后一行放入变量中,然后在范围名称中使用该变量,就像我在下面所做的那样。我还对您的代码进行了一些清理,使其更易于阅读且更高效。您收到运行时错误,因为您缺少 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 - 具有动态范围和 customOrder excel 的排序宏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12095053/

相关文章:

vba - 使用 VBA 代码在 Excel 中创建组合图表

excel - 替换子匹配

python - pandas 中导入 Excel 文件的多重索引问题

正则表达式-忽略与模式匹配的常量字符串

arrays - 在 VBA 中隐藏连续值

vba - 使用 Vlookup 在 VBA 中查找日期时出现错误 2042

vba - 获取 VBA Excel 2010 中所有字体的列表

sql - 需要将 2 个语句合并为 1 个

java - 如何使用VBA宏打开CSV文件

excel - 从 Excel VBA 运行 Powerpoint sub