【问题标题】:Macros for auto-refresh of pivot-tables用于自动刷新数据透视表的宏
【发布时间】:2021-02-20 14:54:55
【问题描述】:

我有一个巨大的 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

如何为文件中的所有数据透视表展开此宏?或者是否有其他方法可以在不实际单击每个表的情况下更新数据透视表?

【问题讨论】:

标签: excel vba pivot-table refresh olap-cube


【解决方案1】:

这是一个未经测试的提案,但您似乎有以下代码行:

ActiveSheet.PivotTables("PivotTable4").PivotFields(...

您希望将此应用于工作簿中的所有数据透视表。好吧,我建议您浏览所有工作表和其中的所有数据透视表,两者都可以使用For Each 循环来完成,例如:

For Each l_sheet in ActiveWorkbook.Worksheets
  For Each l_pivot_table in l_sheet.PivotTables
    l_pivot_table.PivotFields(...
    ...
  Next
Next

【讨论】:

    【解决方案2】:

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

    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
    

    【讨论】:

      猜你喜欢
      • 2018-12-30
      • 2016-09-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-15
      • 2015-06-08
      • 2010-11-03
      相关资源
      最近更新 更多