按照自第二行以来的列值对工作表进行排序

时间:2017-03-01 16:00:19

标签: vba excel-vba sorting runtime-error excel-2007

我想根据第二行到最后一列(新旧)的值(日期)对工作表进行排序。
我编写了代码,但始终存在错误:1004,排序引用无效。有人碰巧知道解决方案吗?
谢谢。
Workbooks("Task2.xlsm").Worksheets("Data").Column("A:CA").Sort key1:=Range("H2"), order1:=xlDescending, Header:=xlYes

3 个答案:

答案 0 :(得分:0)

你想要key1:=Range("H:H")?吗? 我假设H列是你的关键,而不是单个H2。

答案 1 :(得分:0)

Column更改为Columns(我认为发布您的代码时会出错)

然后,只要Worksheets("Data")不是当前活动的工作表,就会出现运行时错误。最好的办法是完全避免这种类型的错误,始终使用合格范围

With Workbooks("Task2.xlsm").Worksheets("Data")
    .Column("A:CA").Sort key1:=.Range("H2"), order1:=xlDescending, Header:=xlYes
End with
                              ^^^^

请注意.前面的Range("H2")(点),它会将显式引用到with子句中指定的工作表。如果没有这个,您将使用不合格的范围 whcih引用当前有效的工作表。

答案 2 :(得分:0)

我录制了一个宏,我找到了答案(可以简化):

    Workbooks("Task2.xlsm").Worksheets("Data").AutoFilter.Sort.SortFields.Clear
    Workbooks("Task2.xlsm").Worksheets("Data").AutoFilter.Sort.SortFields.Add Key:=Range("H1"), SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortTextAsNumbers
    With Workbooks("Task2.xlsm").Worksheets("Data").AutoFilter.Sort
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With