簡體   English   中英

Excel 2010 VBA循環數據透視表

[英]excel 2010 vba loop pivot tables

我有16個數據透視表,用戶按下按鈕時需要更新。 需要運行的代碼如下:

ActiveSheet.PivotTables("PivotTable10").PivotFields("count").ClearAllFilters
        ActiveSheet.PivotTables("PivotTable10").PivotFields("scrap code").ClearAllFilters
               ActiveSheet.PivotTables("PivotTable10").PivotFields("count").ShowAllItems = True

        With ActiveSheet.PivotTables("PivotTable10").PivotFields("count")
            .PivotItems("0").Visible = False
        End With

數據透視表的名稱為: MSP,MSP30,FSP,FSP30,MRP,MRP30,FRP,FRP30,MPP,MPP30,FPP,FPP30,MCP,MCP30,FCP,FCP30

我想將PivotTable10替換為一個遍歷該PivotTable10表列表的變量。 現在,我的代碼是上面代碼的16個塊。 我對循環知之甚少,但在我的Google搜索中卻找不到這種循環的好例子。

編輯:最終代碼工作了,下面的兩個答案都完美地工作,此代碼只是稍快一點

Sub IteratePivots()

Application.ScreenUpdating = False

On Error Resume Next

Worksheets("Analytics Admin").Activate

Dim pvtTables As PivotTables
Dim pvtTable As PivotTable
Set pvtTables = Application.ActiveSheet.PivotTables
For Each pvtTable In pvtTables
    pvtTable.PivotFields("count").ClearAllFilters
    pvtTable.PivotFields("scrap code").ClearAllFilters
    pvtTable.PivotFields("count").ShowAllItems = True

    With pvtTable.PivotFields("count")
        .PivotItems("0").Visible = False
    End With
Next

Application.ScreenUpdating = False
End Sub

試試這個代碼。 此代碼將迭代工作表中的所有可旋轉軸。

Sub IteratePivots()
Dim pvtTables As PivotTables
Dim pvtTable As PivotTable
Set pvtTables = Application.ActiveSheet.PivotTables
For Each pvtTable In pvtTables
    pvtTable.PivotFields("count").ClearAllFilters
    pvtTable.PivotFields("scrap code").ClearAllFilters
    pvtTable.PivotFields("count").ShowAllItems = True

    With pvtTable.PivotFields("count")
        .PivotItems("0").Visible = False
    End With
Next
End Sub

這有點駭人聽聞,但這樣的技巧可能會達到目的:

  Dim pt As PivotTable
  Dim ws As Worksheet
  Dim names As Variant
  Dim found As Boolean

  Set ws = ActiveWorkbook.ActiveSheet
  names = Split("MSP,MSP30,FSP,FSP30,MRP,MRP30,FRP,FRP30,MPP,MPP30,FPP,FPP30,MCP,MCP30,FCP,FCP30", ",")

  For Each pt In ws.PivotTables
    found = False

    For i = 1 To UBound(names)
      If pt.Name = names(i) Then
        found = True
      End If
    Next i

    If found Then
      pt.PivotFields("count").ClearAllFilters
      pt.PivotFields("scrap code").ClearAllFilters
      pt.PivotFields("count").ShowAllItems = True

      pt.PivotFields("count").PivotItems("0").Visible = False
    End If

  Next pt

您可能會注意到我笨拙的檢查,以查看名稱是否在數組中……這是一個更好的解決方案:

https://stackoverflow.com/a/10952705/190829

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM