首页 > 解决方案 > 如何在使用 VBA 输入用户后对 MS-Excel 表列进行排序?

问题描述

在该列范围中输入项目后,我想将自动排序功能添加到 Excel 表列。以下脚本已插入所需的工作表中。

Private Sub WorksheetActivate()
    ' Sorts table automatically after each entry

    Dim WKSeriesList    As Sort
    
    Set WKSeriesList = ActiveSheet.ListObjects("KitchenLinesTable").Sort

    WKSeriesList.SortFields.Clear
    'Clear previous sorting method

    With WKSeriesList
        .SortFields.Add2 Key:=Range("KitchenLinesTable[[#All],[Kitchen Series]]"), _
        SortOn:=xlSortOnValues, Order:=xlAscending
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
End Sub

标签: excelvba

解决方案


Worksheet_Change 事件检测到“厨房系列”列中的任何更改,并调用sortTable 过程作为一些参数:表名、列名、排序类型。

将此代码放入您的工作表模块中

Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Range("KitchenLinesTable[[#All],[Kitchen Series]]")) Is Nothing Then
        Call sortTable("KitchenLinesTable", "Kitchen Series", xlAscending)
    End If
End Sub

将此代码放在标准模块上

Sub sortTable(tblName As String, colName As String, sOrder As XlSortOrder)
    Dim ol As ListObject: Set ol = ActiveSheet.ListObjects(tblName)
    Dim olColRng As Range: Set olColRng = ol.ListColumns(colName).DataBodyRange
    
    ol.Sort.SortFields.Clear
    
    ol.Sort.SortFields.Add2 _
        Key:=olColRng, _
        SortOn:=xlSortOnValues, _
        Order:=sOrder, _
        DataOption:=xlSortTextAsNumbers
    
    With ol.Sort
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
End Sub

推荐阅读