我一直在Excel 2010的摘要表上使用六个切片器。每个切片器连接到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个项目,我不确定它会更快。
有没有人对我如何能够做到这一点有任何想法?我不是在寻找代码,因为我想自己采取一些措施,但我不确定我应该选择哪条路径,或者是否有更有效的替代方案来替代我已经使用的代码。非常感谢!
答案 0 :(得分:4)
我遇到了类似的问题:
Dim oSlicerC As SlicerCache
For Each oSlicerC In ActiveWorkbook.SlicerCaches
If oSlicerC.FilterCleared = False Then oSlicerC.ClearManualFilter
Next oSlicerC`
答案 1 :(得分:0)
这是一个老帖子,但还有另一种可能性。
如果您在excel表中有数据,则可以调用该表
tbl.AutoFilter.ShowAllData
这也将非常快速地重置所有切片器。
在我的程序之间有173'561行和其他内容。
对于上面的每个例子:6.88秒 我的例子:6.92秒
也许存在一种情况更快的情况。 例如它必须重置不仅仅是几个切片,我的版本应该更快。
答案 2 :(得分: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
'''