Ошибка 1004 VBA Pivot фильтр содержит значение - PullRequest
0 голосов
/ 11 октября 2018

этот код работает хорошо на начальном этапе.Но ошибка 1004 выходит после нескольких раз тестирования.разрыв кода в этой строке

Set Field = pt.PivotFields("Rep Order#")

Я проверил имя поля в сводной таблице.это точно так же.

Может ли кто-нибудь помочь взглянуть?

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)

    'Set the Variables to be used
    Dim pt As PivotTable
    Dim pt2 As PivotTable
    Dim Field As PivotField
    Dim Field2 As PivotField
    Dim pivot_item As PivotItem
    Dim pivot_item2 As PivotItem
    Dim NewCat As String
    Dim test_val As String

    'Here you amend to suit your data
    Set pt = Worksheets("Backlog Analysis 2").PivotTables("PivotTable2")
    Set pt2 = Worksheets("Backlog Analysis 2").PivotTables("PivotTable1")
    Set Field = pt.PivotFields("Rep Order#")
    Set Field2 = pt2.PivotFields("Rep Order#")

    NewCat = Worksheets("Backlog Analysis 2").Range("L11").Value

    'Here is the test if the input field exists
    test_val = NewCat
    For Each pivot_item In pt.PivotFields("Rep Order#").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.PivotFilters.Add2 Type:=xlCaptionContains, Value1:=NewCat
        pt.RefreshTable
    End With

    With pt2
        Field2.ClearAllFilters
        Field2.PivotFilters.Add2 Type:=xlCaptionContains, Value1:=NewCat
        pt.RefreshTable
    End With

End Sub

1 Ответ

0 голосов
/ 11 октября 2018

Если код работает изначально, а затем перестает работать, мое первое предположение должно состоять в том, чтобы либо отключить События, либо ограничить выполнение кода только при изменении определенного диапазона.Ваш код теперь мы запускаем каждый раз, когда что-либо меняется в книге (в том числе, когда ваш код меняет сводные таблицы).

Попробуйте добавить это в начале вашего кода:

Application.EnableEvents = False

И это в конце:

Application.EnableEvents = True

Кроме того, кажется, что вы действительно хотите только этоработать при изменении диапазона («L11»).Итак, вы можете добавить условное выражение вверху:

If Target.Address = "$L$11" And Sh.Name = "Backlog Analysis 2" Then
    'Run Your Code
End If
...