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

Sab*_*lad 6 excel vba pivot-table excel-vba

我想制作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
Run Code Online (Sandbox Code Playgroud)

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

pt.PivotCache.MissingItemsLimit = xlMissingItemsNone

这是我的数据透视表的图片:

在此输入图像描述

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

Rob*_*zie 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
Run Code Online (Sandbox Code Playgroud)

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

在此输入图像描述