我正在尝试根据数据中的最新日期自动过滤数据透视表,并且我遇到了以下代码。但是,当我尝试执行它时,我得到了一个
运行时错误(1004 - 无法设置PivotItem类的Visible属性)
就行:pfiPivFldItem.Visible = False
有人可以帮我解决这个问题吗?
Dim pfiPivFldItem As PivotItem
Dim dtmDate As Date
With Worksheets("Sheet2").PivotTables("Campaigns")
.PivotCache.Refresh
.ClearAllFilters
With .RowRange
dtmDate = Evaluate("MAX(IF(ISNUMBER(" & .Address(0, 0) & ")," & .Address(0, 0) & ",))")
End With
For Each pfiPivFldItem In .PivotFields("Date").PivotItems
If pfiPivFldItem.Value = "(blank)" Then
pfiPivFldItem.Visible = False
Else
pfiPivFldItem.Visible = (CDate(pfiPivFldItem.Value) = CLng(dtmDate))
End If
Next pfiPivFldItem
答案 0 :(得分:1)
当民众试图迭代PivotItems并改变可见性时,这是一个常见的错误。之所以发生这种情况是因为您必须始终保持一个项目可见。解决方法是将第一个项目设置为可见,执行循环,然后检查第一个项目是否应该可见。当然,如果您正在寻找的东西不在数据透视表中,这对您来说无法帮助您,这可能就是这里的情况。由于http://dailydoseofexcel.com/archives/2013/11/09/a-date-with-pivotitems/
中列出的问题/错误,很可能(CDate(pfiPivFldItem.Value)永远不会等于CLng(dtmDate))在过滤数据透视表时还需要做一些其他事情,例如在循环数据透视表时将数据透视表.ManualUpdate属性切换为TRUE,否则PT将在每次更改后尝试更新。
建议你在Filter pivot table 1004 error查看我的答案,因为代码评论显示了如何以及为什么要做这些事情。还建议你查看我在http://dailydoseofexcel.com/archives/2013/11/14/filtering-pivots-based-on-external-ranges/上的博客文章,该文章深入研究了在PivotItems上进行迭代时的瓶颈和解决方法。
请注意,在一个项目上过滤字段的最快方法是使其成为PageField,并将.PageField值设置为相关的PivotItem。这几乎是瞬间完成的,如果您在PivotField中有数千个项目正在迭代,那么会产生巨大的差异。