【发布时间】:2015-07-31 15:21:23
【问题描述】:
我正在尝试设置几个简单的按钮来过滤工作簿内多个工作表上的多个枢轴。这里没有什么花哨的!枢轴不共享一个共同的来源,所以切片器不适合我。但它们都共享一个我想过滤的通用字段名称。
如果我单步执行 (F8) 我的代码可以工作,但如果我尝试直接执行 (F5) 我会收到“代码执行已中断”的错误,并且调试器会突出显示第一个 Next。如果我注释掉修改过滤器的行,无论我采用哪种方式,该函数都会运行良好。请帮忙?
Sub troubleshoot()
Dim wks As Worksheet, strName As String, pvt As PivotTable, strPvtName As String
For Each wks In Worksheets
strName = wks.Name
For Each pvt In wks.PivotTables
strPvtName = pvt.Name
Debug.Print strName + " / " + strPvtName
Sheets(strName).PivotTables(strPvtName).PivotFields("OrderSubType").ClearAllFilters
Next
Next
Set wks = Nothing
Set pvt = Nothing
End Sub
【问题讨论】:
-
你试过用
FOR i和FOR j代替2FOR EACH吗?有时,当您修改引用的对象或内容时,FOR EACH 会在循环内停止工作 -
顺便说一句,这行
Sheets(strName).PivotTables(strPvtName).PivotFields("OrderSubType").ClearAllFilters可以替换为pvt.PivotFields("OrderSubType").ClearAllFilters,因为您已经引用了数据透视表对象 -
关于缩短线路的好点。我曾经在某个时候遇到过这种情况,但在尝试排除故障时会不断改变。回复:您对使用 i 和 j 的其他建议,我需要为第一个循环执行类似
For i = 1 To ThisWorkbook.Worksheets.Count的操作,对吗?但是我还没有想出正确的方法来获得给定电子表格中数据透视表的相似数量,以便在第二个循环中用于 j ?我知道的 VBA 足以让自己陷入困境...... -
OK - 更正。我可以数数,但我现在无法正确地将它们组合在一起......
-
似乎该错误不是由我的代码专门引起的。在执行我的函数打算执行的所有相同步骤的录制宏时,我遇到了同样的错误。显然这是一个小错误。解决办法是切换到VBE窗口,做Ctrl+Break/Pause。关闭 VBE 窗口,确定它将结束调试器。然后返回电子表格并运行宏 - 没有错误。奇怪,但现在可以工作了!
标签: vba excel pivot-table