2016-09-19 193 views
0

我試圖根據兩個單元格值來刷新我的powerpivot數據透視表。最終用戶將使用單元格C17和C18中的下拉列表來導出單元格G17和G18中的值(通過一些Excel計算)。數據透視表將根據單元格G17和G18進行刷新。使用VBA從單元格值控制Excel數據透視表的過濾器

我編寫了如下代碼,但它似乎不起作用,因爲數據透視表在我從C17和C18下拉列表中選擇一個值後沒有刷新。

Sub Worksheet_SelectionChange(ByVal Target As Range) 

If Intersect(Target, Range("G17:G19")) Is Nothing Then Exit Sub 

Dim pt As PivotTable 
Dim FieldHr As PivotField 
Dim FieldEndingMin As PivotField 
Dim NewHr As String 
Dim NewMin As String 

Set pt = Worksheets("Calculator").PivotTables("Table1") 
Set FieldHr = pt.PivotFields("Hr") 
NewHr = Worksheets("Calculator").Range("G17").Value 
Set FieldEndingMin = pt.PivotFields("Ending Min") 
NewMin = Worksheets("Calculator").Range("G18").Value 

With pt 
FieldHr.ClearAllFilters 
FieldHr.CurrentPage = NewHr 
FieldEndingMin.ClearAllFilters 
FieldEndingMin.CurrentPage = NewMin 
pt.RefreshTable 
End With 

End Sub 
+0

你有錯誤?或者只是沒有更新? –

回答

0

我感動的代碼Worksheet_SelectionChangeWorksheet_Change事件。

我添加了一個Union範圍,單元格C17:C18與單元格G17:G19(在您提到的G17:G18後,需要G19)。

Private Sub Worksheet_Change(ByVal Target As Range) 

If Intersect(Target, Union(Range("C17:C18"), Range("G17:G19"))) Is Nothing Then Exit Sub 

Dim pt     As PivotTable 
Dim FieldHr   As PivotField 
Dim FieldEndingMin  As PivotField 
Dim NewHr    As String 
Dim NewMin    As String 

Set pt = Worksheets("Calculator").PivotTables("Table1") 
Set FieldHr = pt.PivotFields("Hr") 
NewHr = Worksheets("Calculator").Range("G17").Value 
Set FieldEndingMin = pt.PivotFields("Ending Min") 
NewMin = Worksheets("Calculator").Range("G18").Value 

With FieldHr 
    .ClearAllFilters 
    .CurrentPage = NewHr 
End With 

With FieldEndingMin 
    .ClearAllFilters 
    .CurrentPage = NewMin 
End With 

pt.RefreshTable 

End Sub 
相關問題