簡體   English   中英

使用VBA從單元格值控制Excel數據透視表的篩選器

[英]Control Filters of Excel Pivot Tables from Cell Values with VBA

我正在嘗試基於兩個單元格值刷新我的powerpivot數據透視表。 最終用戶將使用單元格C17和C18中的下拉列表來導出單元格G17和G18中的值(通過一些excel計算)。 數據透視表將根據單元格G17和G18刷新。

我編寫了如下代碼,但由於在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

我將代碼從Worksheet_SelectionChange移到Worksheet_Change事件。

我在單元格C17:C18和單元格G17:G19中添加了范圍Union (是否需要G19?在您提到G17:G18的帖子中)。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM