我在Excel2010中的摘要工作表上使用了六个切片器。每个切片器连接到26个数据透视表。
我在过去使用了下面的代码来清除切片器选择,它的延迟最小。这一次,代码需要6-7秒才能执行。
Dim oSlicerC As SlicerCache
For Each oSlicerC In ActiveWorkbook.SlicerCaches
oSlicerC.ClearManualFilter
Next oSlicerC我在网上找不到任何可以加速宏/使其更有效的东西。
我尝试将ScreenUpdating、DisplayAlerts和EnableEvents设置为False,并在代码开头尝试将Calculation设置为xlCalculationManual。
我考虑过遍历每个SlicerItem以取消选择每个条目,但由于在几个切片器中有多达100个条目,我不确定这是否会更快。
我不是在寻找代码,因为我想自己尝试一下,但我不确定我应该走哪条路,或者是否有比我已经使用的更有效的替代方案。
发布于 2015-04-02 02:06:57
我也遇到了类似的问题,最终解决了:
Dim oSlicerC As SlicerCache
For Each oSlicerC In ActiveWorkbook.SlicerCaches
If oSlicerC.FilterCleared = False Then oSlicerC.ClearManualFilter
Next oSlicerC`发布于 2018-04-26 16:40:02
这是一个古老的帖子,但也有另一种可能性。
如果数据在excel表中,则可以调用该表。
tbl.AutoFilter.ShowAllData这也会非常快地重置所有切片器。
在我的程序之间有173'561行和其他东西。
对于上面的每个示例: 6.88秒我的示例: 6.92秒
也许会有这样一种情况,那就是其中一个更快。例如,它必须重置更多,而不仅仅是几个切片器我的版本应该更快。
发布于 2019-10-29 15:03:12
我看到它很久以前就发布了,但这仍然是有用的:我只是为sliceritem定义了两个参数,在循环第一个项目的同时,运行另一个循环来取消选择全部。“”“
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“”“
https://stackoverflow.com/questions/18919106
复制相似问题