循环工作表,刷新和排序数据透视表

时间:2018-03-16 15:05:26

标签: excel vba excel-vba

我尝试创建一个宏来遍历工作簿中的所有工作表,确定是否存在数据透视表,刷新数据透视表以及对特定列进行排序。有许多工作表不会在特定列上排序,因此我已包含代码以排除它们。

似乎只是对ActiveSheet上的数据透视表进行排序。我认为这是因为ActiveSheet.PivotTable(1)篇,但如果我把这篇文章拿出来,代码将无法运行。我对VBA很新,所以我不知道接下来要做什么。任何帮助将不胜感激。

Sub RefreshPivotCache()
    Dim ws As Worksheet
    Dim PT As PivotTable

    For Each ws In ActiveWorkbook.Worksheets '<~~ Loop all worksheets in workbook
        If ws.PivotTables.Count > 0 Then
              If (ws.Name <> "L&D TE Summary") And (ws.Name <> "L&D BCD Summary") And (ws.Name <> "HR Ops TE") And (ws.Name <> "HR Ops BCD") And (ws.Name <> "Strat Delivery Summary") _
                And (ws.Name <> "Strat Delivery TE") And (ws.Name <> "Strat Delivery BCD") Then
                    For Each PT In ws.PivotTables        '<~~ Loop all pivot tables in worksheet
                        PT.PivotCache.Refresh
                       ActiveSheet.PivotTables(1).PivotFields("Associate Name").AutoSort _
                         xlDescending, " ", ActiveSheet.PivotTables(1).PivotColumnAxis. _
                         PivotLines(1), 1

                     Next PT
                End If
        End If

    Next ws
End Sub

1 个答案:

答案 0 :(得分:1)

您只需更改Activesheet上的数据透视表,但永远不会在循环中激活ws。所以改变

ActiveSheet.PivotTables(1).PivotFields("Associate Name").AutoSort _
                         xlDescending, " ", ActiveSheet.PivotTables(1).PivotColumnAxis. _
                         PivotLines(1), 1

ws.PivotTables(1).PivotFields("Associate Name").AutoSort _
                         xlDescending, " ", ws.PivotTables(1).PivotColumnAxis. _
                         PivotLines(1), 1