繁体   English   中英

遍历多个工作表和表格以进行多条件排序

[英]Looping through multiple worksheets and tables to do a multi-criteria sort

尝试创建一个遍历多个工作表的循环,选择表并根据多个条件对其进行排序。 每个工作表只有一个表,这是我到目前为止提出的。

    Sub sorter()
'
' sorter Macro
'
' Keyboard Shortcut: Ctrl+Shift+F
'

Dim varTblSortName As Variant
varTblSortName = ActiveSheet.Name
Dim Client As Worksheet
Dim rng As Range



For Each Client In ActiveWorkbook.Worksheets
'This tests to make sure the code is only run on Client_ sheets
    If InStr(1, Client.Name, "Client_", vbTextCompare) Then
  Set rng = ActiveSheet.ListObjects(1)


     Worksheets(Client.Name).Activate
        'ActiveSheet.ListObjects(1).Range.Select

            'Range(, Selection.End(xlDown)).Select
            'Range(Selection, Selection.End(xlToRight)).Select
            'ActiveWorkbook.Worksheets("Client_Jamie").ListObjects("Client_Jamie").Sort. _

               ActiveSheet.ListObjects(1).Sort.SortFields.Clear
            ActiveWorkbook.ActiveSheet.ListObjects(1).Sort. _
                SortFields.Add Key:=Range("varTblSortName[Asset Class]"), SortOn:= _
                xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
            ActiveWorkbook.ActiveSheet.ListObjects(1).Sort. _
                SortFields.Add Key:=Range("varTblSortName[Sector]"), SortOn:=xlSortOnValues, _
                Order:=xlAscending, DataOption:=xlSortNormal
            ActiveWorkbook.ActiveSheet.ListObjects("varTblSortName").Sort. _
                SortFields.Add Key:=Range("varTblSortName[Ticker]"), SortOn:=xlSortOnValues, _
                Order:=xlAscending, DataOption:=xlSortNormal
            With ActiveWorkbook.ActiveSheet.ListObjects("varTblSortName").Sort
                .Header = xlYes
                .MatchCase = False
                .Orientation = xlTopToBottom
                .SortMethod = xlPinYin
                .Apply
            End With
            End If
        Next Client
End Sub

我扩展了With / End With的用法,并从引用的字符串中断开了您的字符串变量。

Sub sorter()
' Keyboard Shortcut: Ctrl+Shift+F
    Dim varTblSortName As Variant
    Dim Client As Worksheet

    For Each Client In ActiveWorkbook.Worksheets
        With Client
            If CBool(InStr(1, .Name, "Client_", vbTextCompare)) Then
                varTblSortName = .Name
                With .ListObjects(varTblSortName)
                    .Sort.SortFields.Clear
                    .Sort.SortFields.Add Key:=Range(varTblSortName & "[Asset Class]"), SortOn:= _
                        xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
                    .Sort.SortFields.Add Key:=Range(varTblSortName & "[Sector]"), SortOn:=xlSortOnValues, _
                        Order:=xlAscending, DataOption:=xlSortNormal
                    .Sort.SortFields.Add Key:=Range(varTblSortName & "[Ticker]"), SortOn:=xlSortOnValues, _
                        Order:=xlAscending, DataOption:=xlSortNormal
                    With .Sort
                        .Header = xlYes
                        .MatchCase = False
                        .Orientation = xlTopToBottom
                        .SortMethod = xlPinYin
                        .Apply
                    End With
                End With
            End If
        End With
    Next Client
End Sub

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM