使用动态范围排序宏和customOrder excel [英] Sort Macro with dynamic range and customOrder excel

查看:341
本文介绍了使用动态范围排序宏和customOrder excel的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试制作多级排序宏,而行的数量是动态的。我一直在弄乱一些测试数据来尝试让它工作,但是我从Excel中不断获得1004个运行时错误。希望第二双眼睛将有助于找出这一点。

I am trying to make a multi-level sort Macro, while the amount of rows is dynamic. I've been messing around with some test data to try and get it to work, however I keep getting 1004 run-time errors from Excel. Hoping a second pair of eyes will help figure this out.

这是测试数据

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成为最后一行。所以我不确定该放在哪里。

Also see the Line where i have Range("A1:A10"), want A10 to be the last row. So I was unsure what to put there.

感谢所有,

Jim

推荐答案

将最后一行放入变量中,然后在范围名称中使用该变量,就像我在下面完成的。我也清理了你的代码,使它更容易阅读和更有效率。您收到运行时错误,因为您缺少 SetRange 方法:

Place your last row into a variable, then use that variable in your range name, like I've done below. I've also cleaned up your code a bit to make it easier to read and more efficient. You were getting Run-Time error, because you were missing the SetRange method:

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

这篇关于使用动态范围排序宏和customOrder excel的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆