我正在寻找一种方法来过滤我的数据透视表基于机器类型(一个字段,我拖到我的数据透视表过滤框)。
我以前用过下面的公式,它起作用了,但是,我得到了
错误1004:无法获取数据透视表类的PivotFields属性。
单元格A1具有要筛选的计算机名称
Sub FilterbyMachine()
Dim pt As PivotTable
Set pt = Sheets("Pivottables").PivotTables("MachineStats")
Dim pf As PivotField
Set pf = pt.PivotFields("Machine")
pf.ClearAllFilters
'slow iterates all items and sets Visible (manual filter)
Dim pi As PivotItem
For Each pi In pf.PivotItems
pi.Visible = (pi.Name = Range("a1"))
Next
'fast way sets a label filter
pf.PivotFilters.Add2 Type:=xlCaptionEquals, Value1:=Range("a1")
End Sub
2条答案
按热度按时间kr98yfug1#
你在这一行得到错误?:
我想可能是因为没有使用该名称的数据透视字段。Like here.
尝试在该行之前添加以下内容,以检查有哪些名称:
编辑其他选项:它可能与透视缓存有关。您可以尝试从这里(下面)在相同的位置调用子缓存。
可能没有必要保留它。试着自己运行一次。然后是你的代码。如果这样做不错,你可能想在错误处理中的set pf行附近调用它。以防它再次发生。类似于这样:
如果它确实有效,并且您以某种方式将其包含在内,您可能需要注解掉,或者替换为Debug.Prints和MsgBox。
z0qdvdin2#
对于未来的一代,快速检查的第一件事是宏是在Excel工作表中定义的,而不是在模块中。我可能错了,但它解决了我的问题。