使用VBA User Form来过滤数据透视表(特别是报表filter和切片器不能)

我有一个数据透视表,手动创build。 用户需要能够通过报表filter或切片器进行过滤,所以我认为VBA将是最佳select。 我已经构build了一个骨架用户表单,现在处于编写代码的棘手阶段。

我正在尝试使用PivotFilters函数,但这不起作用。 我会承认我是VBA的新手,所以这可能是我犯的一个简单的错误,或者PivotFilters不是正确的工具。 这里是一个例子:

'ok button - this is the big one, telling the button what to do with the selected options! Private Sub CommandButton1_Click() 'targeting our familiar pivot table Dim pvt As PivotTable Set pvt = ActiveSheet.PivotTables("PivotTable1") 'Whether to filter out low sample size brands Dim pvtFieldSasz As PivotField Set pvtFieldSasz = pvt.PivotFields("SampleSize") If OptionButton1 = True Then pvt.pvtFieldSasz.PivotFilters.ClearAllFilters pvt.pvtFieldSasz.PivotFilters.Add2 Type:=xlCaptionEquals, Value1:="Reliable Sample" End If End 

上面的例子可以用报表filter或切片机完成的,但是我想把所有相关的选项放在用户表单中,以使其成为用户的一站式商店。

我得到的错误消息是“运行时错误'438':对象不支持属性或方法”。

我还没有转移到更棘手的,因为我想掌握基本知识。 作为我想在不同的filter中实现的一个例子:

filter将参考三个单独列中的一个,具体取决于用户select的选项。 用户将有三个选项button,其中他们一次只能select一个。 如果他们selectOptionButton1,我希望数据透视表在字段X = 1上被过滤。如果他们select了OptionButton2,它应该在字段Y = 1上过滤。OptionButton3对应于字段Z = 1。这些字段X,Y或Z实际上将作为行或列显示在数据透视表中,但它们是源数据的一部分,并且包含在数据透视表后面的select中。

感谢您的耐心帮助这个磕磕绊绊的新手 – 非常感谢任何提示!

问题在于这两行:

  pvt.pvtFieldSasz.PivotFilters.ClearAllFilters pvt.pvtFieldSasz.PivotFilters.Add2 Type:=xlCaptionEquals, Value1:="Reliable Sample" 

首先, pvtFieldSasz已经代表了数据透视表字段。 尝试使用pvt.pvtFieldSasz指定它将不起作用,因为pvtFieldSasz不是pvtFieldSasz的属性或方法pvt 。 相反,你应该只使用pvtFieldSasz 。 这在接下来的陈述中也是一个问题。

其次, ClearAllFilters方法不适用于PivotFilters属性。 相反,它适用于pivotField本身。

结合这两个问题的工作代码:

  pvtFieldSasz.ClearAllFilters pvtFieldSasz.PivotFilters.Add2 Type:=xlCaptionEquals, Value1:="Reliable Sample" 

作为一个旁注,我也指定工作表,而不是使用ActiveSheet作为ActiveSheet可以有问题,所以

  Set pvt = Sheets("Sheet1").PivotTables("PivotTable1")