我正在寻找在Excel 2016中构建数据透视表的方法,该数据透视表将具有链接到其他Excel单元格的过滤器 s ,因此它们无需手动调整过滤器,而是链接到单元格值(值更改基于INDEX-MATCH公式)。
大量在线资源,我能够找到有效的代码。挑战是我有2个单独的过滤器(我不想合并数据以将过滤器保持为1)。
这很好,但是仅适用于一个单元格和一个过滤器:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Intersect(Target, Worksheets(1).Range("I6:I7")) Is Nothing Then Exit Sub
'Set the Variables to be used
Dim pt As PivotTable
Dim Field As PivotField
Dim pivot_item As PivotItem
Dim NewCat As String
Dim test_val As String
'Here you amend to suit your data
Set pt = Worksheets(1).PivotTables("PivotTable1")
Set Field = pt.PivotFields("Brand")
NewCat = Worksheets(1).Range("I6").Value
'Here is the test if the input field exists
test_val = NewCat
For Each pivot_item In pt.PivotFields("Brand").PivotItems
If pivot_item.Name = test_val Then
Exit For
End If
Next pivot_item
On Error Resume Next
'This updates and refreshes the PIVOT table
With pt
Field.ClearAllFilters
Field.CurrentPage = NewCat
pt.RefreshTable
End With
End Sub
还有另一个带有过滤器"Type"
的PivotField,我正尝试将其链接到范围"H6"
。我在调整后的“范围和字段”下(也作为WorkSheet属性)复制了调整后的代码。值应该正确,因为此代码也可以工作-单独。
鉴于不允许我使用两个具有相同名称的代码,我将另一个重命名为 2 ,但我不确定这是正确的。我没有收到任何错误消息,但是第二个代码不起作用。更改单元格“ I6”值时会得到结果,但是“ H6”无效。
Private Sub Worksheet_SelectionChange2(ByVal Target As Range)
如何将这两个过滤器链接到它们各自的单元格(同时)?还是所有这些都必须在同一代码内工作?
最好仅更改单元格数据使其工作(就像原始代码适用于单个过滤器一样),但是第二个最佳选择是需要在单元格调整后通过按钮启动VBA脚本。
非常感谢!
答案 0 :(得分:0)
如果在检查目标是否与x范围相交的方式方面发生变化,则可以在同一组代码中包含大量的Ranges。
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Not Intersect(Target, Worksheets(1).Range("I6:I7")) Is Nothing Then
'<previous code>
ElseIf Not Intersect(Target, Worksheets(1).Range("H6")) Is Nothing Then
'<new code>
End If
End Sub