excel 2010 vba透视表报告过滤器更新

时间:2016-02-03 01:13:37

标签: excel vba excel-vba filter pivot-table

我在同一张表上有16个数据透视表," Analytics Admin",我记录并清理了下面的宏(在更新数据透视表源之前的代码)。它基本上是16次相同的代码,唯一改变的是数据透视表名称(MSP,MSP30,FSP,FSP30等)。是否可以一次更改所有数据透视表的报告过滤器?

Worksheets("Analytics Admin").Activate

'refreshes all data, clears all filters then filters 0 and blanks out of all custom range pareto pivot tables

ActiveSheet.PivotTables("MSP").PivotCache.Refresh
    ActiveSheet.PivotTables("MSP").PivotFields("count").ClearAllFilters
    ActiveSheet.PivotTables("MSP").PivotFields("count").ShowAllItems = True

    With ActiveSheet.PivotTables("MSP").PivotFields("count")
        .PivotItems("0").Visible = False
        .PivotItems("(blank)").Visible = False
    End With
    ActiveSheet.PivotTables("MSP").PivotCache.Refresh

ActiveSheet.PivotTables("FSP").PivotCache.Refresh
    ActiveSheet.PivotTables("FSP").PivotFields("count").ClearAllFilters
    ActiveSheet.PivotTables("FSP").PivotFields("count").ShowAllItems = True

    With ActiveSheet.PivotTables("FSP").PivotFields("count")
        .PivotItems("0").Visible = False
        .PivotItems("(blank)").Visible = False
    End With
    ActiveSheet.PivotTables("FSP").PivotCache.Refresh

2 个答案:

答案 0 :(得分:0)

Something along the lines of (not tested, just typed into here)

    dim ws as Worksheet
    set ws = ThisWorkbook.Worksheets("Analytics Admin")
    dim pt as PivotTable
        For Each pt In ws.PivotTables
'            Debug.Print Pivot.Name
            pt.PivotFields("count").ClearAllFilters
            pt.PivotFields("count").ShowAllItems = True

            With pt.PivotFields("count")
              .PivotItems("0").Visible = False
              .PivotItems("(blank)").Visible = False
            End With
            pt.PivotCache.Refresh
            pt.refreshTable
            pt.Update
        Next

答案 1 :(得分:0)

如果你有Excel 2010或更高版本,并且大多数(希望所有)这些Pivots共享完全相同的数据源,你可以在很少或没有循环的情况下完成此操作。只需在"计数"上设置切片器。字段然后将其连接到所有数据透视表(右键单击切片器,然后选择"报告连接"然后您只需要在其中一个数据透视表上运行代码,所有其他数据库将自动更新。

如果您不希望用户点击它,您可以在某处隐藏切片器。