这是我的代码
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'排序引用无效。确保它在您要排序的daya中,然后首先按框排序不相同或空白。当我单击调试时。.apply 被突出显示
有什么建议吗?
只是在这里重申吉佩德的回答,但看法略有不同:
1(myline
实际上应该定义为长整型或整数
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
所有排序字段,以防万一您在此工作表上运行许多不同的排序器。
您正在尝试将 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
试试这个:
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
将数据转换为表,然后使用 vba,使用 listObjects 使用工作表查找我的表。 然后,我找到第 1、2 和 3 列的索引。 然后,我使用表范围和列索引添加排序字段。
这不起作用:
Set data_table = MyWorksheet.ListObjects("Tbl_Name")
column1_index = data_table.ListColumns("Column 1").index
column2_index = data_table.ListColumns("Column 2").index
column3_index = data_table.ListColumns("Column 3").index
With data_table.Sort
.SortFields.Add Key:=data_table.Range(column1_index), Order:=xlAscending
.SortFields.Add Key:=data_table.Range(column2_index), Order:=xlAscending
.SortFields.Add Key:=data_table.Range(column3_index), Order:=xlDescending
.Header = xlYes
.Apply
End With
这奏效了:
ProbabilitiesWorksheet.Range("B5").Sort Key1:=Range("F5"), Order1:=xlAscending, Header:=xlYes
ProbabilitiesWorksheet.Range("B5").Sort Key1:=Range("D5"), Order1:=xlDescending, Header:=xlYes
ProbabilitiesWorksheet.Range("B5").Sort Key1:=Range("C5"), Order1:=xlAscending, Header:=xlYes
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