Excel VBA表格多列排序问题:筛选按钮异常消失
多列排序与筛选按钮丢失问题
我需要对表格的3列按A-Z字母顺序排序,遇到了不少麻烦。一开始用录制宏的方式实现,但因为表格列数太多,出现了公式计算异常的问题,于是转而手动指定范围写代码:
Sub trieNameCenterStatus() Dim ws As Worksheet Dim lastRow As Long Set ws = ThisWorkbook.Worksheets("Database") ' Find the last row in the table lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row ' Define the entire range of the table Dim tableRange As Range Set tableRange = ws.Range("A3:IH" & lastRow) ' Apply AutoFilter to the entire table range tableRange.AutoFilter ' Clear existing sort fields ws.AutoFilter.Sort.SortFields.Clear ' Apply sorting on the entire table, focusing on specific columns With ws.AutoFilter.Sort .SortFields.Add Key:=ws.Range("M3:M" & lastRow), _ SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal .SortFields.Add Key:=ws.Range("D3:D" & lastRow), _ SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal .SortFields.Add Key:=ws.Range("F3:F" & lastRow), _ SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal .SetRange tableRange .Header = xlYes .MatchCase = False .Orientation = xlTopToBottom .SortMethod = xlPinYin .Apply End With End Sub
这段代码的错误大多集中在.SetRange tableRange语句处。
之后我改用下面的代码实现了排序:
Sub trieNameCenterStatus() Dim ws As Worksheet Dim lastRow As Long Set ws = ThisWorkbook.Worksheets("Database") ' Find the last row in the table lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).row ' Define the entire range of the table for sorting Dim sortRange As Range Set sortRange = ws.Range("A3:IH" & lastRow) ' Define the range for the keys (columns M, D, and F) Dim keyRange1 As Range, keyRange2 As Range, keyRange3 As Range Set keyRange1 = ws.Range("M3:M" & lastRow) Set keyRange2 = ws.Range("D3:D" & lastRow) Set keyRange3 = ws.Range("F3:F" & lastRow) ' Apply multi-level sorting With ws.Sort .SortFields.Clear .SortFields.Add Key:=keyRange1, Order:=xlAscending .SortFields.Add Key:=keyRange2, Order:=xlAscending .SortFields.Add Key:=keyRange3, Order:=xlAscending .SetRange sortRange .Header = xlYes .MatchCase = False .Orientation = xlTopToBottom .Apply End With End Sub
但新问题出现:表头下方的筛选按钮仅在A到M列保留,其余列的筛选按钮消失了。
内容的提问来源于stack exchange,提问作者Maoane
相关产品推荐
相关产品推荐

