首页 > 解决方案 > 排序多列excel VBA

问题描述

这是我的代码

Sub SortMultipleColumns(myline As String)

    With Worksheets("Result-Inactive").Sort
        .SortFields.Add Key:=Range("A1"), Order:=xlAscending
        .SortFields.Add Key:=Range("D1"), Order:=xlAscending
        .SortFields.Add Key:=Range("J1"), Order:=xlAscending
        .SetRange Range("A1:C" & myline)
        .Header = xlYes
        .Apply
    End With

End Sub

我收到以下错误,我不明白为什么“运行时错误'1004'排序引用无效。确保它在您要排序的日期内,然后首先按框排序不相同或空白。当我点击调试。.apply 被高亮显示

有什么建议么?

标签: excelvbasorting

解决方案


只是在这里重申 Jeeped 的答案,但略有不同:

1)myline应该真正定义为 Long 或 Integer

2)声明的范围Key:=Range("A1")应定义为相同的工作表

D3)和的键J在 which 之外.setRange,也应定义为在同一个工作表上

我坚持使用您的相同代码,但将ws工作表定义添加到所有范围,并将您的设置范围更改为包含最多列J

Sub SortMultipleColumns(myline As Long)

Dim ws As Worksheet: Set ws = ThisWorkbook.Worksheets("Result-Inactive")

    With ws.Sort
        .SortFields.Clear
        .SortFields.Add Key:=ws.Range("A1"), Order:=xlAscending
        .SortFields.Add Key:=ws.Range("D1"), Order:=xlAscending
        .SortFields.Add Key:=ws.Range("J1"), Order:=xlAscending
        .SetRange ws.Range("A1:J" & myline)
        .Header = xlYes
        .Apply
    End With

End Sub

我假设myline存在,因为有时您只想对一组数据的顶部进行排序。我还在clear所有排序字段中添加了一行,以防万一您在此表上运行许多不同的排序器。


推荐阅读