Excel 2013.我使用3个组合框来更改数据透视表上的过滤器。 我的第一个组合框有“Project1”,“Project2”和&所有。 我的第二个组合框有“Customer1”,“Customer2”和&所有。 我的第三个组合框有“Country1”,“Country2”和&所有
我正在使用9个数据透视表,它们都有[Project],[Customer],[Country]的过滤器。
我的目的是将第一个组合框更改为Project1&所有数据透视表过滤器应该更改为Project1.I我成功地能够做到这一点。
但是当我选择第一个组合框为“全部”时。第一个组合框单元链接到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
答案 0 :(得分:0)
由于前三行代码没有问题,我将假设数据透视表PVT1
和字段Project Name
都存在。这会将错误放在某处。
对于.CurrentPage
的来电,您会收到1004错误,原因如下:
Report Filter
的任何字段。您无法使用CurrentPage
过滤任何行或列关于第二点,这是对Range
的调用可能相关的地方。
.Text
将使用单元格的 display 值,而不是其基础.Value
要解决这些问题,可以选择以下几种方法:
PivotItems
并设置Visible = True/False
CurrentPage
中存在的值,您可以为该PivotItems
重复PivotField
并检查其匹配情况。该代码与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
范围图片