Excel VBA-一次选择多个切片器项而不刷新
我试图从一个切片器中选择和取消选择多个切片器项目,而不让它触发更新,直到我的所有选择都完成。我可以在Excel前端通过Ctrl键单击所有我想要的选择来完成这项工作。但是,当我记录具有此行为的宏并运行它时,它会在每次选择/取消选择后更新(记录的宏只是一组Excel VBA-一次选择多个切片器项而不刷新,excel,pivot-table,vba,Excel,Pivot Table,Vba,我试图从一个切片器中选择和取消选择多个切片器项目,而不让它触发更新,直到我的所有选择都完成。我可以在Excel前端通过Ctrl键单击所有我想要的选择来完成这项工作。但是,当我记录具有此行为的宏并运行它时,它会在每次选择/取消选择后更新(记录的宏只是一组.selection=True/False语句,位于with块中) 我尝试使用SlicerCaches.VisibleSlicerItemsList函数,但这会引发1004应用程序错误-即使我使用SlicerItem.Name字段填充数组: Dim
.selection=True/False
语句,位于with
块中)
我尝试使用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.Calculation = xlmanual
在你选择之后
Application.Calculation = xlautomatic
这对我来说非常有效。我也有同样的问题 正如@joseph4tw在评论中发布的那样,真正需要的是
Application.EnableEvents=False
行。但是,我需要在迭代最终切片器之前再次重新启用事件,以使事件实际触发。我不再有权访问代码(以前的工作),但想象一下解决方案包括计算切片器的数量,并在循环中调用n-1以重新启用事件。您是否在执行代码之前尝试过Application.EnableEvents=False
,然后在执行代码之后重置它??看起来可以了-谢谢!请注意,我需要在上一次选择之前重新打开事件,以便我需要捕获的其他事件实际触发,但这似乎可以做到。