【发布时间】:2015-08-26 03:00:28
【问题描述】:
Excel 2013。我正在使用 3 个组合框来更改数据透视表上的过滤器。 我的第一个组合框有“Project1”、“Project2”和所有。 我的第二个组合框有“Customer1”、“Customer2”和所有。 我的第三个组合框有“Country1”、“Country2”和所有。
我正在使用 9 个数据透视表,它们都具有 [项目]、[客户]、[国家/地区] 等过滤器。
我的意图是将第一个组合框更改为 Project1,所有数据透视表过滤器都应更改为 Project1。我成功地做到了。
但是,当我将第一个组合框选择为“全部”时。第一个组合框单元格链接到 Y1。我收到 VBA 运行时错误 1004:应用程序定义或对象定义错误。
Sub ProjectName()
ActiveSheet.PivotTables("PVT1").PivotFields("Project Name").ClearAllFilters
ActiveSheet.PivotTables("PVT2").PivotFields("Project Name").ClearAllFilters
ActiveSheet.PivotTables("PVT3").PivotFields("Project Name").ClearAllFilters
ActiveSheet.PivotTables("PVT1").PivotFields("Project Name").CurrentPage = Range("Y1").Text
ActiveSheet.PivotTables("PVT2").PivotFields("Project Name").CurrentPage = Range("Y1").Text
ActiveSheet.PivotTables("PVT3").PivotFields("Project Name").CurrentPage = Range("Y1").Text
【问题讨论】:
-
如果添加断点并逐行执行(点击
F8前进),哪一行会报错? -
第四行在我使用断点时出错。 ActiveSheet.PivotTables("PVT1").PivotFields("项目名称").CurrentPage = Range("Y1").Text
-
您使用的是
All还是(All)?后者是正确的版本。 -
我确实使用了(全部),但没有帮助。我试图创建的代码在报告过滤器中,它不是行或列过滤器。所以我使用了 9 个数据透视表,它们都有报表过滤器作为 [项目]、[客户]、[国家]。
-
我真的很难找到问题所在。一种解决方法是用
If... Then将它们全部包围,以避免过滤器(如果它是All)。像If Range("Y1").Text <> "All" Then : 'filtering code : End If这样的东西。组合框的图片也可能有所帮助。调试时,预期值是否通过Range("Y1").Text?