[英]Excel 2013 VBA Pivot Table Filters will change but values wont show
[英]combo box to change filters on excel pivot table
Excel2013。我正在使用3个组合框来更改数据透视表上的过滤器。 我的第一个组合框为“ Project1”,“ Project2”和“全部”。 我的第二个组合框有“ Customer1”,“ Customer2”和“ All”。 我的第三个组合框有“ Country1”,“ Country2”和“ All”。
我正在使用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
由于前三行代码没有问题,因此我假定数据透视表PVT1
和字段Project Name
都存在。 此后将错误放置在某处。
对于.CurrentPage
的调用,由于以下原因,您将收到1004错误:
Report Filter
器”的任何字段。 您不能使用CurrentPage
来过滤任何行或列 在第二点上,这是对Range
的调用可能相关的地方。
.Text
,它将使用单元格的显示值,而不是其基础.Value
要解决这些问题,有两种选择:
PivotItems
并设置Visible = True/False
CurrentPage
存在的值,则可以迭代该PivotField
的PivotItems
并检查是否匹配。 该代码与带有检查值的For Each
循环非常相似,只是不要设置Visible
。 用于在行或列上设置过滤器的代码
Sub FilterPivotField()
Dim pt As PivotTable
Set pt = ActiveSheet.PivotTables("PVT1")
Dim pf As PivotField
Set pf = pt.PivotFields("C")
pf.ClearAllFilters
'slow iterates all items and sets Visible (manual filter)
Dim pi As PivotItem
For Each pi In pf.PivotItems
pi.Visible = (pi.Name = Range("J2"))
Next
'fast way sets a label filter
pf.PivotFilters.Add2 Type:=xlCaptionEquals, Value1:=Range("J2")
End Sub
范围图片
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.