2015-07-16 3 views
0

У меня есть следующий код:Фильтрация сводной таблицы на основе текстовой строки в ячейке

Private Sub Worksheet_SelectionChange(ByVal Target As Range) 
    If Intersect(Target, Range("K2:K3")) Is Nothing Then Exit Sub 

    Dim pt As PivotTable 
    Dim Field As Variant 
    Dim NewCat As String 
    Set pt = Worksheets("Fact Trans").PivotTables("PivotTable1") 
    Set Field = pt.PivotFields("[Locations].[Loc Name].[Location Name]") 
    NewCat = Worksheets("Fact Trans").Range("K2").Value 
    With pt 
     Field.ClearAllFilters 
     Field.CurrentPage = NewCat 
     pt.RefreshTable 
    End With 

End Sub 

Так как вы можете видеть, что я пытаюсь изменить свою сводную таблицу на основе значения в К2, но я продолжайте получать ошибку «Ошибка времени выполнения« 1004 »: невозможно установить свойство CurrentPage класса PivotField» и строку выделения отладки «Field.CurrentPage = NewCat».

Любое понимание того, почему и как я могу заставить этот код работать, будет замечательным.

+0

Обычно, когда вы используете 'With' блок, вам нужно с' .' перед объектами, которые являются частью этого родительского объекта. – Chrismas007

+0

Что значит chrismas007? – user3666237

+0

Выполните [This Link] (https://msdn.microsoft.com/en-us/library/wc500chb.aspx) в примерах. – Chrismas007

ответ

0

Вот обновленный код

Private Sub Worksheet_SelectionChange(ByVal Target As Range) 


If Intersect(Target, Range("K2:K3")) Is Nothing Then Exit Sub 

Dim pt As PivotTable 

Dim Field As Variant 

Dim NewCat As String 


Set pt = Worksheets("Fact Trans").PivotTables("PivotTable1") 

Set Field = pt.PivotFields("[Locations].[Loc Name].[Location Name]") 

NewCat = Worksheets("Fact Trans").Range("K2").Value 


With ActiveSheet.PivotTables("PivotTable1").PivotFields("[Locations].[Loc Name].[Location Name]") 
    .ClearAllFilters 

.PivotFilters.Add Type:=xlCaptionEquals, Value1:=ActiveSheet.Range("K3").Value 

End With 

End Sub 
Смежные вопросы