Всем спасибо за помощь.
Написала вот такой код (только у меня 5 листов и колонки с 3й по 6ю):
И на всех листах, где повторяются фильтры, добавила:
Буду еще тестить, но вроде работает.
Написала вот такой код (только у меня 5 листов и колонки с 3й по 6ю):
| Код |
|---|
Sub RecountFilter(sh As Worksheet)
Dim i As Integer 'номер колонки
Dim j As Integer 'номер листа
Dim k() 'массив критериев
For j = 1 To 5 'для листов 1-5
With Worksheets(j) 'для j-ого листа
If .Index <> sh.Index Then 'если это не активный лист, с которого уходим
For i = 3 To 6 'для столбцов 3-6
With sh.AutoFilter.Filters(i) 'для i-ого столбца
If .On Then 'если установлен фильтр
If .Operator = xlAnd Or .Operator = xlOr Then 'если установлен в фильтре установлено 2 значения и\или
'тогда на j-ом листе в i-ом столбце устанавливаем фильтр с критериями с активного листа
Worksheets(j).Range("A1").AutoFilter (i), Criteria1:=sh.AutoFilter.Filters(i).Criteria1, Operator:=sh.AutoFilter.Filters(i).Operator, Criteria2:=sh.AutoFilter.Filters(i).Criteria2
ElseIf .Operator = xlFilterValues Then 'если установлено несколько значений фильтра
k = sh.AutoFilter.Filters(i).Criteria1 'запоминаем критерии фильтра в массив
Worksheets(j).Range("A1").AutoFilter (i), Criteria1:=k, Operator:=xlFilterValues 'устанавливаем фильтры на j-ом листе в i-ом столбце
Else 'иначе тот случай когда установлено одно значение фильтра
Worksheets(j).Range("A1").AutoFilter (i), Criteria1:=sh.AutoFilter.Filters(i).Criteria1 'устанавливаем это значение
End If
Else 'если фильтр не установлен, снимаем фильтр на j-ом листе в i-ом столбце
If Not sh.AutoFilter Is Nothing Then
Worksheets(j).Range("A1").AutoFilter Field:=i
End If
End If
End With
Next i
End If
End With
Next j
End Sub
|
И на всех листах, где повторяются фильтры, добавила:
| Код |
|---|
Private Sub WorkSheet_Deactivate() RecountFilter Me End Sub |
Изменено: - 29.01.2016 13:06:35