excel 2010 vba循环数据透视表
我有16个数据透视表,当用户按下按钮时,我需要更新这些数据透视表。需要运行的代码如下所示: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
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秒。