Итак, вопрос в том, когда вы хотите, чтобы код был запущен? В настоящее время он запускается, когда в листе есть событие «SelectionChange». Я предполагаю, что идея заключается в том, что он должен быть запущен после внесения изменений в сводные данные. Таким образом, этот код должен быть написан в Sheet2
:
![](https://i.stack.imgur.com/V0zEZ.png)
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim pt As PivotTable
Dim NewCat As String
NewCat = Worksheets("Sheet2").Range("H3").Value
For Each pt In Worksheets("Sheet2").PivotTables
With pt.PivotFields("Customer Name")
.ClearAllFilters
.PivotFilters.Add Type:=xlCaptionEquals, Value1:=NewCat
End With
Next pt
End Sub
Чтобы код работал со всеми листами, просто скопировав и вставив его, рассмотрите возможность изменения Worksheets("Sheet2")
с Me
везде. Таким образом, Me
относится к листу кода, в котором он находится. В случае выше Me = Worksheets("Sheets2")
.