Excel SortFields添加然后排序

kir*_*off 2 sorting excel vba range excel-vba

你能帮助我理解这个snippset:

首先,似乎添加了排序规则

MainSheet.Sort.SortFields.Clear
For lI = 1 To vSortKeys(0, 1)   
    MainSheet.Sort.SortFields.Add Key:=Range(vSortKeys(lI, 1) & 2), 
       SortOn:=xlSortOnValues, Order:=vSortKeys(lI, 2), DataOption:=xlSortNormal
Next
Run Code Online (Sandbox Code Playgroud)

然后,我了解以下代码有效地运行排序

With MainSheet.Sort
    .SetRange Range("A" & lFrom & ":" & GEN_REV_END & lTo)
    .Header = xlNo
    .MatchCase = False
    .Orientation = xlTopToBottom
    .SortMethod = xlPinYin
    .Apply
End With
Run Code Online (Sandbox Code Playgroud)

这种解释是否正确 - 首先需要添加排序规则,然后将其应用于第二部分?

然后,我们为什么要在第二部分中定义一个排序范围

With MainSheet.Sort
    .SetRange Range("A" & lFrom & ":" & GEN_REV_END & lTo)

End With
Run Code Online (Sandbox Code Playgroud)

是不是已经在我们排序的规则中了Key:=Range(vSortKeys(lI, 1) & 2)?有效运行哪种细胞范围?

Kap*_*pol 6

排序正在应用于指定的范围Sort.SetRange.该Key参数Sort.SortFields.Add允许您指定将决定soring的订单字段.每个字段可以只是具有列标题的单元格.您可以为多个排序级别添加多个键.

举个例子,如果您在单元格中有数据A1:C10并且想要以升序方式A对其进行排序,请将列中的信息作为排序键,您可以这样设置列A中的数据作为键:

MainSheet.Sort.SortFields.Add Key:=Range("A1") '("A1:A10") will also work
Run Code Online (Sandbox Code Playgroud)

然后,您可以指定将根据该键排序的范围,如下所示:

 MainSheet.Sort.SetRange Range("A1:C10")
Run Code Online (Sandbox Code Playgroud)