Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel VBA-一次选择多个切片器项而不刷新_Excel_Pivot Table_Vba - Fatal编程技术网

Excel VBA-一次选择多个切片器项而不刷新

Excel VBA-一次选择多个切片器项而不刷新,excel,pivot-table,vba,Excel,Pivot Table,Vba,我试图从一个切片器中选择和取消选择多个切片器项目,而不让它触发更新,直到我的所有选择都完成。我可以在Excel前端通过Ctrl键单击所有我想要的选择来完成这项工作。但是,当我记录具有此行为的宏并运行它时,它会在每次选择/取消选择后更新(记录的宏只是一组.selection=True/False语句,位于with块中) 我尝试使用SlicerCaches.VisibleSlicerItemsList函数,但这会引发1004应用程序错误-即使我使用SlicerItem.Name字段填充数组: Dim

我试图从一个切片器中选择和取消选择多个切片器项目,而不让它触发更新,直到我的所有选择都完成。我可以在Excel前端通过Ctrl键单击所有我想要的选择来完成这项工作。但是,当我记录具有此行为的宏并运行它时,它会在每次选择/取消选择后更新(记录的宏只是一组
.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
,然后在执行代码之后重置它??看起来可以了-谢谢!请注意,我需要在上一次选择之前重新打开事件,以便我需要捕获的其他事件实际触发,但这似乎可以做到。