这是我的代码
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变得亮了
有什么建议吗?
答案 0 :(得分:1)
您正在尝试将D和J列包括在内,作为次级排序条件,但将其从排序范围中排除。此外,Range("xn")
不一定属于不活动结果的工作表,而没有语法为.Range("xn")
。请尝试使用替代的VBA排序,而不是“宏”记录器生成的方法。
Sub SortMultipleColumns()
With Worksheets("Result-Inactive")
with .cells(1, "A").currentregion
.Cells.Sort Key1:=.Range("A1"), Order1:=xlAscending, _
Key2:=.Range("D1"), Order2:=xlAscending, _
Key3:=.Range("J1"), Order3:=xlAscending, _
Orientation:=xlTopToBottom, Header:=xlYes
end with
End With
End Sub
答案 1 :(得分:1)
这里只是重申了吉普车的答案,但略有不同:
1)myline
应该真正定义为Long或Integer
2)用Key:=Range("A1")
声明的范围应定义为同一工作表
3)D
和J
的键在.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
的所有排序字段添加了一行,以防万一您在此工作表上运行许多不同的排序器。
答案 2 :(得分:0)
尝试一下:
Sub SortingColumnsInRange
' Selecting range
Range("A:X").Select
' Sort column C, after column N and after column P
Selection.Columns.Sort key1:=Columns("C"), Order1:=xlAscending, Key2:=Columns("N"), Order2:=xlAscending, key3:=Columns("P"), Order3:=xlAscending, Header:=xlYes
End Sub