Excel VBA:清除数据透视表中的项目

时间:2013-07-26 15:19:13

标签: excel vba excel-vba filter pivot-table

我是VBA新手...... 我正在尝试编写一个宏来清除名为“Product Family”的数据透视表过滤器中的所有选择,并仅选择名称包含在单元格“B33”中的项目。我在一张表“sheet8”中引用数据透视表,并尝试更改“仪表板”上的图表。

这是代码......

    Sub thisisalsotemp()
'
' thisisalsotemp Macro
'

'
    Sheets("Dashboard").Select
    ActiveSheet.ChartObjects("Chart 1").Activate
    Sheet8.PivotTables("capbylp").PivotFields("Product Family").PivotFields.ClearAllFilters
    With Sheet8.PivotTables("capbylp").PivotFields("Product Family")
            .PivotItems(Range("B33")).Visible = True
    End With
End Sub

错误如下: Sheet8.PivotTables(“capbylp”)。PivotFields(“Product Family”)。PivotFields.ClearAllFilters

错误消息是: Object不支持此属性或方法

@SeanCheshire:谢谢你的帮助。我觉得这更接近我想要的东西。但是,我无法让它发挥作用。我玩了一下它并且更近了。这就是我的......

    Sub thisisalsotemp2()
        Sheets("Dashboard").Select
        Sheet8.PivotTables("capbylp").PivotFields("Product Family") = Range("B33")
    End Sub

错误1004读取:无法设置pivottable类的pivotfields属性

行中的

:Sheet8.PivotTables(“capbylp”)。PivotFields(“Product Family”)= Range(“B33”)

2 个答案:

答案 0 :(得分:2)

您需要设置CurrentPage(并且您不需要先清除它) 使用代码中显示的内容,我会有类似的内容:

Sheet8.PivotTables("capbylp").PivotFields("Product Family"). _
    PivotFields("MyPivotField").CurrentPage = Range("B33").Value

(为了便于阅读,分为2行)

答案 1 :(得分:1)

这有点关系;我想在用户制作时清除多个选择。显然,设置VisibleItemsList可以做到这一点。

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Dim xPF As PivotField
    Dim nms As Variant
    nms = Array("Calculation", _
        "Rate Type", _
        "xx Hierarchy")
    Set xPT = Application.ActiveSheet.PivotTables(1)
    For Each xPF In xPT.PageFields
        For Each nm In nms
            If xPF.Name Like "*" & nm & "*" Then
                If UBound(xPF.VisibleItemsList) > 1 Then
                    xPF.VisibleItemsList = Array("")
                End If
            End If
        Next nm
    Next xPF
End Sub