无法设置PivotItem类(VBA)的Visible属性

Sti*_*vdk 4 excel vba pivot-table excel-vba

我试图通过VBA操作Excel 2007数据透视表,以便我可以循环使用数据透视表的类别,将所有设置为不可见但只有一个,将工作表另存为pdf并继续下一个类别.为此,我使用以下代码.

Dim pf As PivotField
Set pf = ActiveSheet.PivotTables("PivotTable1").PivotFields("NAME")

Dim pi as PivotItem
For Each pi In pf.PivotItems

    If pi.Visible = False Then
        pi.Visible = True 'Error here
    End If

    Dim pi2 As PivotItem
    For Each pi2 In pf.PivotItems
        If pi2 <> pi Then
            pi2.Visible = False
        End If
    Next pi2

    'Saving to PDF goes here
Next pi
Run Code Online (Sandbox Code Playgroud)

循环似乎是第一次工作.取消选择每个类别,但第一个类别输出一个漂亮的PDF文件.下次进入循环时,它会在指定的行给出"无法设置PivotItem类的Visible属性"错误.我知道在一个数据透视表中必须至少选择一个项目,但这不是问题,因为我试图将可见性设置为TRUE而不是FALSE.

我尝试通过检查它来修复它,因为可能你不允许将已经可见的PivotItem设置为可见,但这似乎不起作用.

任何帮助将非常感谢!

小智 8

这是由于数据透视表使用缓存的透视项而不是当前的透视项.确保表格不保留任何旧项目.要执行此操作,请右键单击数据透视表,单击"数据"选项卡,然后将"每个字段保留的数量"设置为"无".在VBA中执行此操作的代码是:

Dim pt As PivotTable

pt.PivotCache.MissingItemsLimit = xlMissingItemsNone
Run Code Online (Sandbox Code Playgroud)


whi*_*ler 5

我意识到这已经很久了,但是想为将来寻求解决方案的人们做出贡献。

我遇到了同样的错误,我想出的解决方案是在开始您的数据透视表循环之前先刷新数据透视表。

尝试下面的代码行:

ActiveSheet.PivotTables("PivotTable1").RefreshTable
Run Code Online (Sandbox Code Playgroud)


RBa*_*ung 0

检查 PivotItem 的方向。我相信如果 Orientation 为 xlHidden,则无法将 Visible 设置为 True。如果是这样,那么首先将方向更改为其他值。