[英]Excel 2013 VBA Pivot Table Filters will change but values wont show
我正在使用具有4個層疊組合框的儀表板,其中一個過濾下一個,第二個過濾下一個。 它們連接到具有命名范圍的鏈接單元格。
在另一個工作表上,我的數據透視表與“組合框”位於同一頁上,並連接到數據透視表。
長話短說,因為一個組合框更改了我的數據透視表上的過濾器,從而更改了數據透視表。
我已經完成了這兩種方式,一種方式執行一半的時間,但是兩者都以相同的方式結束。 我可以更改過濾器,但數據透視表不會顯示值。
我將其拼湊在一起並對其進行了修整以滿足我的需求。
Sub changeFilters()
Dim pt As PivotTable
Dim pf As PivotField
Dim pi As PivotItem
Dim wsChart As Worksheet
Dim wsPivot As Worksheet
Dim selCat As Variant
Dim selSub As Variant
Dim selLoc As Variant
Dim selCust As Variant
Set wsChart = ThisWorkbook.Sheets("CHART")
Set wsPivot = ThisWorkbook.Sheets("Pivot")
Set pt = ThisWorkbook.Sheets("Pivot").PivotTables("PT1")
Set selCat = ThisWorkbook.Sheets("CHART").Range("selCat")
Set selSub = ThisWorkbook.Sheets("CHART").Range("selSub")
Set selLoc = ThisWorkbook.Sheets("CHART").Range("selLoc")
Set selCust = ThisWorkbook.Sheets("CHART").Range("selCust")
pt.ManualUpdate = True
Application.ScreenUpdating = False
For Each pi In pt.PivotFields("CATEGORY").PivotItems
Select Case pi.Name
Case [selCat]
pi.Visible = True
Case Else
pi.Visible = False
End Select
Next pi
For Each pi In pt.PivotFields("SUB-CATEGORY").PivotItems
Select Case pi.Name
Case [selSub]
pi.Visible = True
Case Else
pi.Visible = False
End Select
Next pi
For Each pi In pt.PivotFields("LOCATION").PivotItems
Select Case pi.Name
Case [selLoc]
pi.Visible = True
Case Else
pi.Visible = False
End Select
Next pi
For Each pi In pt.PivotFields("CUSTOMER").PivotItems
Select Case pi.Name
Case [selCust]
pi.Visible = True
Case Else
pi.Visible = False
End Select
Next pi
'turn on automatic update / calculation in the Pivot Table
pt.ManualUpdate = False
pt.PivotCache.Refresh
Application.ScreenUpdating = True
End Sub
我相信我已經解決了!,繼續下一期。 解決方案是添加
組合框之前的ThisWorkbook.Sheets("Pivot").PivotTables("PT1").ClearAllFilters
。
修改后的代碼如下。
Option Explicit
Sub changeFilters()
Dim pt As PivotTable
Dim pf As PivotField
Dim pi As PivotItem
Dim wsChart As Worksheet
Dim wsPivot As Worksheet
Dim selCat As Variant
Dim selSub As Variant
Dim selLoc As Variant
Dim selCust As Variant
Set wsChart = ThisWorkbook.Sheets("CHART")
Set wsPivot = ThisWorkbook.Sheets("Pivot")
Set pt = ThisWorkbook.Sheets("Pivot").PivotTables("PT1")
Set selCat = ThisWorkbook.Sheets("CHART").Range("selCat")
Set selSub = ThisWorkbook.Sheets("CHART").Range("selSub")
Set selLoc = ThisWorkbook.Sheets("CHART").Range("selLoc")
Set selCust = ThisWorkbook.Sheets("CHART").Range("selCust")
Application.ScreenUpdating = False
pt.ManualUpdate = True
ThisWorkbook.Sheets("Pivot").PivotTables("PT1").ClearAllFilters
For Each pi In pt.PivotFields("CATEGORY").PivotItems
Select Case pi.Name
Case [selCat]
pi.Visible = True
Case Else
pi.Visible = False
End Select
Next pi
'Removes pivot items from pivot table except those cases defined below (by looping through)
For Each pi In pt.PivotFields("SUB-CATEGORY").PivotItems
Select Case pi.Name
Case [selSub]
pi.Visible = True
Case Else
pi.Visible = False
End Select
Next pi
For Each pi In pt.PivotFields("LOCATION").PivotItems
Select Case pi.Name
Case [selLoc]
pi.Visible = True
Case Else
pi.Visible = False
End Select
Next pi
For Each pi In pt.PivotFields("CUSTOMER").PivotItems
Select Case pi.Name
Case [selCust]
pi.Visible = True
Case Else
pi.Visible = False
End Select
Next pi
'turn on automatic update / calculation in the Pivot Table
pt.ManualUpdate = False
Application.ScreenUpdating = True
End Sub
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.