无法设置PivotItem类的Visible属性

时间:2012-05-06 14:07:30

标签: arrays excel vba pivot-table

运行时错误'1004':无法设置PivotItem类的Visible属性

Excel VBA:

Dim pt As PivotTable
Dim pf As PivotField
Dim pi As PivotItem

Set pf = pt.PivotFields("Snapshot Date")

For Each pi In pf.PivotItems
If pi.Name <> "(blank)" Then
pi = DateValue(pi) 'I have tried using Cdate, Cdbl, Cstr as well.  
End If
Next pi

错误发生在这里:

i = 1
Do Until i >= pf.PivotItems.count - 1

For Each pi In pf.PivotItems
pi.Visible = False 'Error here
Next pi

pf.PivotItems(i).Visible = True '.. And here!
pf.PivotItems(i + 1).Visible = True
Loop

枢轴项目是日期,在我打开/关闭可见性之前,我不确定是否需要格式化它们?

我无休止地搜索,找不到任何解决方案:(关于非连续项目的东西,但我不太明白。

2 个答案:

答案 0 :(得分:2)

您必须至少有一个可见的PivotItem,并且您将它们全部设置为不可见。您需要循环遍历所有PivotItems,将第一个设置为visible = True,然后测试所有其余部分并相应地设置它们,然后测试第一个并相应地设置它。这样你就可以确定总有一个可见的PivotItem。

但是,我不确定你的测试是什么。你有一个循环,但不要增加“i”,所以它将永远循环,总是试图将PivotItems 1和2设置为可见。

我不知道为什么你会得到第二个错误,但如果你能解释你想要做什么,可能会有更好的方法。

答案 1 :(得分:0)

对于任何使用谷歌找到此页面的人(就像我一样),我找到了解决这个问题的方法。

问题似乎只是设置 visible = true

设置 visible = false 似乎工作正常。

如果您禁用多项选择,然后重新启用它,则会选择所有类别。

从那时起,您可以循环并将visible = false设置为您想要的那些。

请参阅下面的示例(工作)代码: -

Dim table As PivotTable
Dim PvI As PivotItem

Set table = ActiveSheet.PivotTables("PivotTable3")
With table.PivotFields("ERROR CODE")
    .ClearAllFilters
    .EnableMultiplePageItems = False
    .CurrentPage = "(All)"
    .EnableMultiplePageItems = True
    For Each PvI In .PivotItems
        Select Case PvI.Name
        Case "Err0"
            PvI.Visible = False
        End Select
    Next
End With

希望这有助于某人。