我需要使用多列作为键对VBA中的数据进行排序,但提前知道列数。
我尝试使用sheets.sort
方法并在for循环中使用.sortfields.add
,但这并没有任何效果。
以下是用于对数据进行排序的代码:
For sh = 1 To 2
Sheets(sh).Sort.SortFields.Clear
For i = 1 To idSize
Sheets(sh).Sort.SortFields.Add Key:=Sheets(sh).UsedRange.Columns(idList(sh)(i)) _
, SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
Next i
With Sheets(sh).Sort
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.Apply
End With
Next sh
其中sh
遍历工作簿中的工作表,而要用作键的每一列的数字索引位于idList
中。例如,idList(2)(1)
代表工作表2中应作为主排序键的列的索引。
此代码根本不会进行排序。
答案 0 :(得分:0)
尝试类似这样的方法。这只是一个如何遍历工作表和列的示例,您可能想更改排序顺序的内部逻辑。
Dim intCols As Integer
Dim rng As Range
Dim sht As Worksheet
For Each sht In Sheets
With sht
Set rng = .Range("A1").CurrentRegion
intCols = rng.Columns.Count
.Sort.SortFields.Clear
For i = 1 To intCols
.Sort.SortFields.Add Key:=Columns(i), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
Next
With .Sort
.SetRange rng
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
End With
Next