【问题标题】:PivotItems("(blank)").Visible = False gives error 400 on one computer but runs without error on anotherPivotItems("(blank)").Visible = False 在一台计算机上给出错误 400,但在另一台计算机上运行时没有错误
【发布时间】:2021-07-16 00:18:35
【问题描述】:

我有一个宏可以帮助用户设置和清除数据透视表上的过滤器。几个月来,该宏在我的整个办公室都运行良好。然后似乎无缘无故,一台人的电脑开始在线上出现错误 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 是sub 的整数参数。

该字段的表源数据中肯定有空白项。该行在我的计算机上工作,我可以确认它正在从表中删除空白项目。但是当我移到我同事的电脑上运行这条线时,它给出了错误 400。

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

【问题讨论】:

  • 您无法隐藏 所有 个数据透视项目,所以当您尝试隐藏它时,它是最后一个可见项目吗?
  • @TimWilliams 是的!有时,不同字段中不同过滤器的组合会从表中删除所有可见项目,但没有单个过滤器会自行删除所有项目。有问题吗?
  • 如果它是唯一可见的,你需要确保你没有试图隐藏它 - 如果你可以显示更多相关代码以围绕你的内容添加一些上下文,有人可能会有建议正在做。
  • @TimWilliams 我今天使用那台 PC 进行了一些诊断测试,发现他们的 Excel 一直在跳过 Workbook_Open 事件,这意味着 .RefreshAll 行从未为他们运行过。该表不缓存源数据,实际上是在尝试过滤空白缓存并导致错误。鉴于您所说的过滤后不允许没有项目,这是有道理的。
  • @TimWilliams 现在我只需要弄清楚为什么他们的 excel 能够跳过 Workbook_Open 事件。

标签: excel vba pivot-table


【解决方案1】:

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

在数据透视表选项中,“将源数据与文件一起保存”未选中,“打开文件时刷新数据”未选中。这是为了减少文件大小并减少打开文件时的延迟。

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多