Появился ещё вопрос, есть какая-нить функция или переменная, которая скрывает все данные фильтра.На пример: У меня есть фильтр "Группа МЦ", в нём поля 0401,0402,0403,0404,0407,0409. когда пробую скрыть их с помощью записи макроса получается такое: [vba]
[/vba] Такая запись не подходит,т.к. если появится ещё одно поле или наоборот одного из этих не будет, макрос не работает. можно-ли скрыть все и оставить 1 например 0407???
Появился ещё вопрос, есть какая-нить функция или переменная, которая скрывает все данные фильтра.На пример: У меня есть фильтр "Группа МЦ", в нём поля 0401,0402,0403,0404,0407,0409. когда пробую скрыть их с помощью записи макроса получается такое: [vba]
[/vba] Такая запись не подходит,т.к. если появится ещё одно поле или наоборот одного из этих не будет, макрос не работает. можно-ли скрыть все и оставить 1 например 0407???Espada
With ActiveSheet.PivotTables("СводнаяТаблица2").PivotFields("Группа МЦ") For j = 1 To .PivotItems.Count If .PivotItems(j).Value <> "0410" Then .PivotItems(j).Visible = False Else .PivotItems(j).Visible = True End If Next j End With
[/vba]
Сделал сам, может кому поможет [vba]
Код
With ActiveSheet.PivotTables("СводнаяТаблица2").PivotFields("Группа МЦ") For j = 1 To .PivotItems.Count If .PivotItems(j).Value <> "0410" Then .PivotItems(j).Visible = False Else .PivotItems(j).Visible = True End If Next j End With
Sub PivotFilter() Dim i As Long Application.ScreenUpdating = False
With ActiveSheet.PivotTables("СводнаяТаблица1").PivotFields("Группа МЦ") For i = 1 To .PivotItems.Count If .PivotItems(i).Value = "0407" Then .PivotItems(i).Visible = True Else: .PivotItems(i).Visible = False End If Next End With
Sub PivotFilter() Dim i As Long Application.ScreenUpdating = False
With ActiveSheet.PivotTables("СводнаяТаблица1").PivotFields("Группа МЦ") For i = 1 To .PivotItems.Count If .PivotItems(i).Value = "0407" Then .PivotItems(i).Visible = True Else: .PivotItems(i).Visible = False End If Next End With
А если сначала выбрать фильтром 0407, а потом тем же самым макросом выбрать 0408? И если, при этом, в таблице 0407 находится выше 0408? Даст ошибку. Кстати, даст ошибку и в случае, если 0407 нет в поле "Группа МЦ". Предлагаю такой вариант: [vba]
Код
Application.ScreenUpdating = 0 z_ = "0401" On Error Resume Next With ActiveSheet.PivotTables("СводнаяТаблица1").PivotFields("Группа МЦ") .ClearAllFilters For i = 1 To .PivotItems.Count If .PivotItems(i).Value <> z_ Then .PivotItems(i).Visible = False Next i If Err.Number <> 0 Then .ClearAllFilters End With On Error GoTo 0 Application.ScreenUpdating = 1
[/vba]
А если сначала выбрать фильтром 0407, а потом тем же самым макросом выбрать 0408? И если, при этом, в таблице 0407 находится выше 0408? Даст ошибку. Кстати, даст ошибку и в случае, если 0407 нет в поле "Группа МЦ". Предлагаю такой вариант: [vba]
Код
Application.ScreenUpdating = 0 z_ = "0401" On Error Resume Next With ActiveSheet.PivotTables("СводнаяТаблица1").PivotFields("Группа МЦ") .ClearAllFilters For i = 1 To .PivotItems.Count If .PivotItems(i).Value <> z_ Then .PivotItems(i).Visible = False Next i If Err.Number <> 0 Then .ClearAllFilters End With On Error GoTo 0 Application.ScreenUpdating = 1