[英]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.