首页 > 解决方案 > 用于自动刷新数据透视表的宏

问题描述

我有一个巨大的 Excel 文件,里面有很多数据透视表(来自 olap-cubes)——每 20 页大约 5 个。每周我都需要更改数据过滤器并将它们向前移动 1 周。我写了一个宏,但只针对一个数据透视表。

Sub Weeks_upd()
'
' Weeks_upd Ìàêðîñ
'
' Ctrl+u
'
    ActiveSheet.PivotTables("PivotTable4").PivotFields( _
        "[Fact data].[Year - Week - day].[Week]").VisibleItemsList = Array("")
    ActiveSheet.PivotTables("PivotTable4").PivotFields( _
        "[Fact data].[Year - Week - day].[Week]").VisibleItemsList = Array( _
        "[Fact data].[Year - Week - day].[Week]").&[202025]", _
        "[Fact data].[Year - Week - day].[Week]").&[202026]", _
        "[Fact data].[Year - Week - day].[Week]").&[202027]", _
        "[Fact data].[Year - Week - day].[Week]").&[202028]")
    ActiveSheet.PivotTables("PivotTable4").PivotFields( _
        "[Fact data].[Year - Week - day].[Week]").VisibleItemsList = Array("")
End Sub

如何为文件中的所有数据透视表扩展此宏?还是有另一种方法来更新数据透视表而不实际单击每个表?

标签: excelvbapivot-tablerefresholap-cube

解决方案


似乎您可以创建一个接收参数并应用所有数据透视表的过程。

Sub test()
    Dim Pv As PivotTable
    Dim Ws As Worksheet
    
    Set Ws = ActiveSheet
    
    For Each Pv In Ws.PivotTables
        setPivot Pv
    Next Pv
        
End Sub

Sub setPivot(Pv As PivotTable)
   Pv.PivotFields( _
        "[Fact data].[Year - Week - day].[Week]").VisibleItemsList = Array("")
    ActiveSheet.PivotTables("PivotTable4").PivotFields( _
        "[Fact data].[Year - Week - day].[Week]").VisibleItemsList = Array( _
        "[Fact data].[Year - Week - day].[Week]").&[202025]", _
        "[Fact data].[Year - Week - day].[Week]").&[202026]", _
        "[Fact data].[Year - Week - day].[Week]").&[202027]", _
        "[Fact data].[Year - Week - day].[Week]").&[202028]")
    Pv.PivotFields( _
        "[Fact data].[Year - Week - day].[Week]").VisibleItemsList = Array("")
End Sub

推荐阅读