0

我在 Excel 2010 的汇总表上使用六个切片器。每个切片器都连接到 26 个数据透视表。

我过去使用下面的代码来清除切片器选择,并且它以最小的延迟工作。这次代码执行需要 6-7 秒。

Dim oSlicerC As SlicerCache

For Each oSlicerC In ActiveWorkbook.SlicerCaches
    oSlicerC.ClearManualFilter
Next oSlicerC

我在网上找不到任何东西来加速宏/使其更高效。

我尝试设置ScreenUpdating,DisplayAlertsEnableEventstoFalse并尝试在代码开头设置Calculationto 。xlCalculationManual

我考虑过遍历每个SlicerItem以取消选择每个,但是在几个切片器中有多达 100 个项目,我不确定这会更快。

我不是在寻找代码,因为我想自己尝试一下,但我不确定我应该走哪条路,或者是否有比我已经使用的更有效的替代方案。

4

3 回答 3

4

我有一个类似的问题,解决了:

Dim oSlicerC As SlicerCache
For Each oSlicerC In ActiveWorkbook.SlicerCaches
If oSlicerC.FilterCleared = False Then oSlicerC.ClearManualFilter
Next oSlicerC`
于 2015-04-01T18:06:56.667 回答
0

我看到它是很久以前发布的,但这仍然很有用:我刚刚为 sliceritems 定义了 2 个参数,并且在循环第一个项目时,运行另一个循环以取消全选。'''

For Each oSi In oScR.SlicerItems
    If oSi.HasData Then
        For Each oSiT In oScR.SlicerItems:
            If oSiT.HasData Then oSiT.Selected = False
        Next
        oSi.Selected = True

    End If
Next

'''

于 2019-10-29T07:03:12.437 回答
0

这是一个旧帖子,但还有另一种可能性。

如果您在 Excel 表中有数据,则可以在该表上调用

tbl.AutoFilter.ShowAllData

这也将非常快速地重置所有切片器。

在我的程序之间有 173'561 行和其他内容

对于上面的每个示例:6.88 秒我的示例:6.92 秒

也许存在其中一种或另一种更快的情况。例如,它必须重置的不仅仅是几个切片器,我的版本应该更快。

于 2018-04-26T08:40:01.567 回答