excel 2010 vba循环数据透视表

excel 2010 vba循环数据透视表,vba,excel,loops,pivot-table,Vba,Excel,Loops,Pivot Table,我有16个数据透视表,当用户按下按钮时,我需要更新这些数据透视表。需要运行的代码如下所示: ActiveSheet.PivotTables("PivotTable10").PivotFields("count").ClearAllFilters ActiveSheet.PivotTables("PivotTable10").PivotFields("scrap code").ClearAllFilters ActiveSheet.PivotTable

我有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

我想用一个循环遍历数据透视表列表的变量替换数据透视表10。现在我的代码是上面16个代码块。我对循环知之甚少,在我的谷歌搜索中还没有找到这种循环的好例子

编辑:最后代码运行了,下面的两个答案都运行得很好,这个代码运行得稍微快一点

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

这有点像黑客,但像这样的东西可能会起作用:

  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
您可能会注意到我笨拙地检查名称是否在数组中。。。这是一个更好的解决方案:


这有点像黑客,但像这样的东西可能会起作用:

  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
您可能会注意到我笨拙地检查名称是否在数组中。。。这是一个更好的解决方案:


试试这个代码。此代码将遍历工作表中的所有可透视数据

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

试试这个代码。此代码将遍历工作表中的所有可透视数据

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

在您的代码中,只有数据透视表名称才会更改,对吗?没错,每次我都会运行精确的4行,当唯一的值为0时,我可能需要添加错误更正。在您的代码中,只有数据透视表名称才会更改,对吗?没错,每次我可能需要添加错误时,我都会运行精确的4行更正唯一值为0时的错误。这与我尝试执行的操作非常接近,唯一的问题是某些“仅数据透视表”的值为0,并且我无法设置数据透视项类的visible属性。@AlbertoBrown,在这种情况下,请在继续之前检查值是否为0。这与我尝试执行的操作非常接近,唯一的问题是某些“仅数据透视表”的值为0,我在无法设置“数据透视项”类的visible属性时出错。@AlbertoBrown,在这种情况下,请在继续之前检查值是否为0。谢谢,这比@hambones代码快6秒。谢谢,这比@hambones代码快一点,大约6秒。