如何使用三列以上的列进行排序



我的工作表有一个五列的大表。第1行有标题。我想使用四列标题作为排序字段对整个表进行排序。

VBA只允许三个,所以我尝试了以下

Sub CreateTimeSeries()
With Range("A1", Range("A1").SpecialCells(xlCellTypeLastCell)).Sort
.SortFields.Clear
.SortFields.Add Key:=Range("B1"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
.SortFields.Add Key:=Range("A1"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
.SortFields.Add Key:=Range("C1"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
.SortFields.Add Key:=Range("D1"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
.Header = xlYes
.Apply
End With

End Sub

我得到

运行时错误"1004":
无法获取Range类的Sort属性。

它不能是工作表。我在运行例程之前选择了工作表。在StackOverflow上尝试各种解决方案并没有修复错误。

这对我有效:

Sub CreateTimeSeries()
Dim tbl As Range

With ActiveSheet
Set tbl = .Range("A1", .Range("A1").SpecialCells(xlCellTypeLastCell))
End With

With tbl.Parent.Sort
.SortFields.Clear
.SortFields.Add Key:=Range("B1"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
.SortFields.Add Key:=Range("A1"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
.SortFields.Add Key:=Range("C1"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
.SortFields.Add Key:=Range("D1"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
.SetRange tbl      '<<<<<<<
.Header = xlYes
.Apply
End With

End Sub

最新更新