设置PivotItem.Visible = false时,无法设置PivotItem类的Visible属性

时间:2016-12-21 07:58:33

标签: excel vba excel-vba pivot-table

我想PivotItem.Visible = False,但我一直收到错误:

  

无法设置PivotItem类的Visible属性

我尝试了我在互联网上找到的所有解决方案,但似乎都没有工作

Sub FloorCompareSetter()

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

    Set PivotSheet = ThisWorkbook.Worksheets("PIVOT")
    PivotSheet.PivotTables("PivotTable5").RefreshTable

    Set pt = PivotSheet.PivotTables("PivotTable5")
    pt.PivotCache.MissingItemsLimit = xlMissingItemsNone

    Set pf = pt.PivotFields("Period")

    For Each pi In _
        pt.PivotFields("Period").PivotItems
        Select Case pi.Name
            Case Is = "1601A"
                pi.Visible = True
            Case Else
                pi.Visible = False 'error
        End Select
    Next pi

End Sub

我尝试刷新表格和此行,但仍无法正常工作:

  

pt.PivotCache.MissingItemsLimit = xlMissingItemsNone

以下是我的数据透视表的图片:

enter image description here

我做错了什么,如何解决这个问题?

2 个答案:

答案 0 :(得分:7)

如果您尝试隐藏任何轴(行,列,过滤器)上的所有项,则会出现此错误。通过将HiddenItems.Count对象的PivotField属性与同一对象的PivotItems.Count属性进行比较,可以在代码中捕获此错误,并确保不要删除最后一项来自视图的集合:

因此,在您的case语句中,您可以使用以下内容替换update:

Select Case pi.Name
    Case Is = "1601A"
        pi.Visible = True
    Case Else
        If pf.HiddenItems.Count < (pf.PivotItems.Count - 1) Then
            pi.Visible = False 
        Else
            MsgBox "Cannot hide all the items on this axis"
            Exit For '<~~ break the loop to stop the MsgBox popping up
        End If
End Select

请注意,在操作数据透视表时,Excel不允许您从轴中删除最后一项 - “确定”按钮将被禁用:

enter image description here

答案 1 :(得分:0)

我添加了

  

On Error Resume Next

之前

  

pi.Visible = False'错误

现在有效!