Excel VBA排序异常:选择降序后仍执行升序排序
Excel VBA排序异常:选择降序后仍执行升序排序
兄弟,这个问题我之前也踩过坑!你之所以选了降序却还是按升序排,核心原因是VBA里的Sort对象会自动保留之前添加的排序字段——第一次执行升序后,那些升序规则并没有被清除,等你切换到降序时,只是新增了降序规则,旧的升序规则还在生效,结果排序逻辑就乱了!
我给你把代码修正一下,关键是每次排序前一定要清空旧的排序字段:
Dim uR As Range Set uR = Worksheets("FullData").UsedRange MsgBox "TEST SortBy = " & SortBy If SortBy = "ascending" Then MsgBox "ascending" With Worksheets("FullData").Sort .SortFields.Clear ' 清空之前的所有排序规则,避免干扰 .SortFields.Add Key:=Worksheets("FullData").Range("A1"), Order:=xlAscending .SortFields.Add Key:=Worksheets("FullData").Range("B1"), Order:=xlAscending .SetRange uR .Header = xlYes .Apply End With ElseIf SortBy = "descending" Then MsgBox "descending" With Worksheets("FullData").Sort .SortFields.Clear ' 同样先清空旧规则 .SortFields.Add Key:=Worksheets("FullData").Range("A1"), Order:=xlDescending .SortFields.Add Key:=Worksheets("FullData").Range("B1"), Order:=xlDescending ' 补全你截断的B列降序设置 .SetRange uR .Header = xlYes .Apply End With End If
额外给你两个小提醒:
- 一定要加
.SortFields.Clear:这是解决问题的核心,它能确保每次排序都是用全新的规则,不会和之前的设置冲突。 - 给
Key的范围加上工作表限定:比如Worksheets("FullData").Range("A1"),防止当前活动工作表不是FullData时出现引用错误,让代码更稳健。
备注:内容来源于stack exchange,提问作者user2741620
相关产品推荐
相关产品推荐

