自动过滤器最后在数据透视表中使用日期

时间:2018-04-11 08:00:30

标签: excel vba excel-vba pivot-table

我正在尝试根据数据中的最新日期自动过滤数据透视表,并且我遇到了以下代码。但是,当我尝试执行它时,我得到了一个

  

运行时错误(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

1 个答案:

答案 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中有数千个项目正在迭代,那么会产生巨大的差异。