PivotItems("(blank)").Visible = False 在一台计算机上给出错误 400 但在另一台计算机上运行时没有错误

PivotItems("(blank)").Visible = False gives error 400 on one computer but runs without error on another

我有一个宏可以帮助用户在数据透视表上设置和清除过滤器。几个月来,宏在我的整个办公室都运行良好。然后似乎没有任何原因,一个人的计算机开始在线上收到错误 400: MySheet.MyPivotTable.MyPivotField.PivotItems("(blank)").Visible = False

作为参考,实际行是 pf_New.PivotItems("(blank)").Visible = False,其中 pf_New 是定义为 Me.PivotTables("Usage").PivotFields(Sheet1.[UsedOn6].Column - 6 + new_machine) 的 PivotField 对象,其中 new_machine 是子项的整数参数。

table 的源数据中肯定有该字段的空白项。该行在我的计算机上有效,我可以确认它正在从 table 中删除空白项。但是,当我转到我同事的计算机并 运行 行时,它给出了错误 400。

有没有人对原因有任何想法,或者关于如何避免错误的建议?是否有替代方法从该数据透视字段中过滤空白行?

在对导致问题的 PC 进行更多调查后,我发现错误的原因是其他设置和代码的组合未能正确设置 table 以进行过滤。

在数据透视 table 选项中,未选中“使用文件保存源数据”和“打开文件时刷新数据”。这是为了减少文件大小并减少打开文件时的延迟。

但是关闭这两个选项意味着枢轴 table 在打开文件时没有数据。在 Excel 中与 table 交互将显示错误“数据透视表保存时没有基础数据。使用刷新数据命令更新报表”但是在 VBA 中与它交互时您反而收到错误“内存不足”或“400”。

为避免此问题,请在尝试应用或更改任何过滤器之前使用 ThisWorkbook.RefreshAllYourPivotTable.RefreshTable

在我的文件中,它只发生在一个人身上而不发生在我其他同事身上的原因是因为我的 Workbook_Open 事件确实在一堆其他事件之后有行 ThisWorkbook.RefreshAll过程。由于我仍在调查的未知原因,此人的 PC 跳过了该行。