2

我是 VBA 的新手...我正在尝试编写一个宏,它将清除名为“产品系列”的数据透视表过滤器中的所有选择,并仅选择其名称包含在单元格“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

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

@SeanCheshire:感谢您的帮助。我觉得这更接近我想要的。但是,我无法让它工作。我玩了一下,离得更近了。这就是我所拥有的...

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

错误 1004 读取:无法设置数据透视表类的数据透视字段属性

在该行中:Sheet8.PivotTables("capbylp").PivotFields("Product Family") = Range("B33")

4

2 回答 2

2

你需要设置CurrentPage(你不应该先清除它)。
使用您的代码中显示的内容,我会有类似的东西:

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

(为了便于阅读,分成两行)

于 2013-07-26T15:32:16.843 回答
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
于 2014-11-07T17:02:02.150 回答