用于自动筛选排序 SortFields 的 VBA 不使用其他列排序进行排序

Posted

技术标签:

【中文标题】用于自动筛选排序 SortFields 的 VBA 不使用其他列排序进行排序【英文标题】:VBA for AutoFilter Sort SortFields not sorting with additional column sorts 【发布时间】:2022-01-18 05:42:57 【问题描述】:

我有一个从顶部向下几行的数据数组。我有工作的 VBA 代码,它将数据与 Range 绑定并将其存储在变量中。然后调整大小以包含标题行,清除过滤器,然后根据所选范围将其添加回来。

那时我想每 3 行对数据进行排序

我使用 Cells.Find 查找我想要的列标题,然后将行和列排序为变量。我将 1 添加到 Column 变量并将其存储为下一个排序的变量...

我已经测试了每个排序命令,它们独立工作,但我无法让它们以组合顺序工作 Date:,然后是 Priority:然后是 Status:。

提前感谢您的帮助。

Cells.Find(What:="Due:", After:=ActiveCell, LookIn:=xlFormulas, LookAt _
:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
False, SearchFormat:=False).Activate

Dim DueRowNumber As Long
Dim DueColumnNumber As Long

DueRowNumber = ActiveCell.Row
DueColumnNumber = ActiveCell.Column
   
Dim PriorityRowNumber As Long
Dim PriorityColumnNumber As Long

PriorityRowNumber = ActiveCell.Row
PriorityColumnNumber = ActiveCell.Column + 1

Dim StatusRowNumber As Long
Dim StatusColumnNumber As Long

StatusRowNumber = ActiveCell.Row
StatusColumnNumber = ActiveCell.Column + 2


ActiveWorkbook.Worksheets("Action Items").AutoFilter.Sort.SortFields.Add Key _
    :=Cells(DueRowNumber, DueColumnNumber), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption _
    :=xlSortTextAsNumbers
ActiveWorkbook.Worksheets("Action Items").AutoFilter.Sort.SortFields.Add Key _
    :=Cells(PriorityRowNumber, PriorityColumnNumber), SortOn:=xlSortOnValues, Order:=xlAscending, _
    CustomOrder:="High,High-Med,Med,Med-Low,Low", _
    DataOption:=xlSortNormal
ActiveWorkbook.Worksheets("Action Items").AutoFilter.Sort.SortFields.Add Key _
    :=Cells(StatusRowNumber, StatusColumnNumber), SortOn:=xlSortOnValues, Order:=xlDescending, _
    CustomOrder:="Late,In Work,Not Started,On Hold,Completed", _
    DataOption:=xlSortNormal
With ActiveWorkbook.Worksheets("Action Items").AutoFilter.Sort
    .Header = xlYes
    .MatchCase = False
    .Orientation = xlTopToBottom
    .SortMethod = xlPinYin
    .Apply
End With

【问题讨论】:

【参考方案1】:

在对其他数据进行进一步调查后(添加了几行具有独特的截止日期、优先级和状态设置...上面的代码似乎可以工作。我希望它可以帮助遇到类似问题的人。

【讨论】:

以上是关于用于自动筛选排序 SortFields 的 VBA 不使用其他列排序进行排序的主要内容,如果未能解决你的问题,请参考以下文章

VBA 宏搜索自动筛选

VBA使用自动筛选器将值复制到另一个工作表

vba 用autofilter筛选不符合条件的值

“ Range类的VBA自动过滤器方法失败”,今天开始工作的代码出现错误

Excel VBA自动筛选器会继续删除与条件不匹配的数据

VBA之文件筛选