1
Set Weight_wb = Application.Workbooks(WEIGHTFileName).Sheets("TERRY_CAT")
Set pt = Weight_wb .PivotTables("PivotTable4")
With Weight_wb .PivotTables("PivotTable4").PivotFields("Cat")
.Orientation = xlColumnField
.Position = 1
End With
With Weight_wb .PivotTables("PivotTable4").PivotFields("Cat")
.Orientation = xlColumnField
On Error Resume Next
.PivotItems("black").Visible = True
.PivotItems("yellow").Visible = False
.PivotItems("brown").Visible = False
.Position = 1
End With
Я хочу изменить приведенный выше код, чтобы быть более гибким. Я хочу написать более общую суб SetClolumnFilter, так что я могу просто позвонить:excel VBA фильтр с поворотным столом с гибкими именами
SetColumnFilter WEIGHTFileName, "Terry_cat", "PivotTable4", "CAT","black"
что-то вроде (это не работает):
Sub SetPageFilter(WB As String, WS As String, pt As String, fd As String,value as string)
Dim wb_ As Workbook, ws_ As Worksheet, pt_ As PivotTable, fd_ As PivotField
ws_ = Application.Workbooks(WB).Sheets(WS)
pt_ = ws_.PivotTables(pt)
fd_ = pt_.PivotFields(fd)
With fd_
.Orientation = xlPageField
End With
Application.ScreenUpdating = True
Dim i As Long
.PivotItems(1).Visible = True
For i = 2 To Field.PivotItems.Count
If .PivotItems(i).Name = Value Then _
.PivotItems(i).Visible = True Else _
.PivotItems(i).Visible = False
Next i
End Sub
Спасибо большое !!
'это не работает' не является полезным описанием проблемы. Как это не работает? Выдает ли ошибка? Если да, то какая строка? Если нет ошибки, как код не дает результат, который вы ищете? Одна вещь, о которой нужно знать, состоит в том, что в наборе 'PivotItems' должен быть хотя бы один видимый элемент. Это всегда сложно, когда вы повторяете их, потому что не обязательно известно, какие из них скрыты/видимы. Сначала вы можете заставить их всех видиться, а затем запустить свой код, чтобы скрыть их все, кроме одного, если это проблема. –