Объединение двух событий worksheet_change для сводных фильтров - PullRequest
0 голосов
/ 28 апреля 2020

Я пытаюсь запустить несколько событий изменения рабочего листа для фильтрации нескольких сводных таблиц на отдельном листе, где находятся сводные таблицы, но я не знаю, как объединить два макроса. Оба макроса работают автономно. Может кто-нибудь показать мне, как их объединить? Макрос 1:

Private Sub Worksheet_Change(ByVal Target As Range)

Dim xPTable As PivotTable
Dim xPFile As PivotField
Dim xStr As String
Dim Pvt As String

On Error Resume Next
If Intersect(Target, Range("C9:C10")) Is Nothing Then Exit Sub

Application.ScreenUpdating = False

For Each xPTable In Worksheets("Pivot").PivotTables

    Pvt = xPTable.Name

    If Pvt = "PivotTable2" Or Pvt = "PivotTable4" Or Pvt = "PivotTable5" Or Pvt = "PivotTable6" Then

        Set xPTable = Worksheets("Pivot").PivotTables(Pvt)
        Set xPFile = xPTable.PivotFields("Code")
        xStr = Target.Text
        xPFile.ClearAllFilters
        xPFile.CurrentPage = xStr

    Else
    End If

Next xPTable

Application.ScreenUpdating = True

End Sub

Макрос 2:

Private Sub Worksheet_Change(ByVal Target As Range)

Dim xPTable As PivotTable
Dim xPFile As PivotField
Dim xStr As String
Dim Pvt As String

On Error Resume Next
If Intersect(Target, Range("C11:C12")) Is Nothing Then Exit Sub

Application.ScreenUpdating = False

For Each xPTable In Worksheets("Pivot").PivotTables

    Pvt = xPTable.Name

    If Pvt = "PivotTable1" Or Pvt = "PivotTable3" Then

        Set xPTable = Worksheets("Pivot").PivotTables(Pvt)
        Set xPFile = xPTable.PivotFields("Ref")
        xStr = Target.Text
        xPFile.ClearAllFilters
        xPFile.CurrentPage = xStr

    Else
    End If

Next xPTable

Application.ScreenUpdating = True

End Sub

Любая помощь будет принята с благодарностью.

1 Ответ

1 голос
/ 28 апреля 2020

Измените ваши Worksheet_Change события, чтобы просто вызывать другие макросы.

Обратите внимание, что это событие изменения может быть вызвано только с листа, на котором хранится макрос, что означает, что вам может потребоваться знать лист, на котором была изменена ячейка, если вы планируете вызывать макросы для работы на другом листе , Вы можете найти лист с изменением, используя Target.Parent.Name

Private Sub Worksheet_Change(ByVal Target As Range)

    Macro1 Target
    Macro2 Target

End Sub

Sub Macro1(Target As Range)

    If Intersect(Target, Range("C9:C10")) Is Nothing Then Exit Sub
    'Rest of your code here for this change event

End Sub

Sub Macro2(Target As Range)

    If Intersect(Target, Range("C11:C12")) Is Nothing Then Exit Sub
    'Rest of your code here for this change event

End Sub
...