【问题标题】:Excel VBA - Selecting multiple slicer items at once without a refreshExcel VBA - 一次选择多个切片器项目而无需刷新
【发布时间】:2012-12-19 20:11:40
【问题描述】:

我正在尝试从单个切片器中选择和取消选择多个切片器项目,而不让它触发更新,直到我的所有选择都完成。通过按住 Ctrl 键单击我想要的所有选择,我可以在 Excel 前端非常简单地做到这一点。但是,当我录制具有此行为的宏并运行它时,它会在每次选择/取消选择后更新(录制的宏只是 With 块中的一堆 .Selection = True/False 语句)。

我尝试使用 SlicerCaches.VisibleSlicerItemsList 函数,但这会引发 1004 应用程序错误 - 即使我使用了 SlicerItem.Name 字段来填充数组:

Dim tntw(0 To 2) as Variant
For i = 0 To 2
    tntw(i) = sc.SlicerItems(i + 1).Name
Next i
sc.VisibleSlicerItemsList = tntw

我还尝试将所有相关的数据透视表设置为手动更新,并尝试将 application.calculation 设置为手动(并在最后切换回),但都没有完成我想要的。

有什么想法吗?

【问题讨论】:

  • 你有没有在执行代码之前尝试Application.EnableEvents = False,然后再重置它??
  • 看起来可以 - 谢谢!请注意,我需要在上次选择之前重新打开事件,以便我需要捕获的其他事件实际触发,但这似乎可以做到。

标签: excel pivot-table vba


【解决方案1】:

在您选择之前放置

Application.Calculation = xlmanual 

选择后

Application.Calculation = xlautomatic

这对我来说非常有效。我有同样的问题。

【讨论】:

    【解决方案2】:

    正如@joseph4tw 在 cmets 中发布的那样,真正需要的只是 Application.EnableEvents = False 行。但是,在迭代最终的切片器以使事件真正触发之前,我需要再次重新启用事件。我不再有权访问代码(以前的工作),但想象一下解决方案涉及计算切片器的数量和循环调用中的 n-1 以重新启用事件。

    【讨论】:

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