Здесь нюанс: AllowFiltering разрешает работу с уже установленными фильтрами. Но не разрешает устанавливать или удалять фильтр. Т.е. сначала надо установить фильтр, потом установить защиту. Пользователь сможет фильтровать данные, но не сможет удалить фильтр или изменить диапазон для фильтра.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
The_Prist написал: Т.е. сначала надо установить фильтр, потом установить защиту. Пользователь сможет фильтровать данные, но не сможет удалить фильтр или изменить диапазон для фильтра.
Что то я не совсем понял. Что мне сделать то нужно? Убрать этот параметр? Убрать защиту? Убрать автофильтр?
В этой же книге у меня работает макрос, может с ним связанно?
Взято из темы Суперфильтр на VBA После установки защиты макрос тоже не работает
Код
Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, Range("Условие")) Is Nothing Then Exit Sub
Dim FilterCol As Integer
Dim FilterRange As Range
Dim CondtitionString As Variant
Dim Condition1 As String, Condition2 As String
On Error Resume Next
Application.ScreenUpdating = False
'определяем диапазон данных списка
Set FilterRange = Target.Parent.AutoFilter.Range
'считываем условия из всех измененных ячеек диапазона условий
For Each cell In Target.Cells
FilterCol = cell.Column - FilterRange.Columns(1).Column + 1
If IsEmpty(cell) Then
Target.Parent.Range(FilterRange.Address).AutoFilter Field:=FilterCol
Else
If InStr(1, UCase(cell.Value), " ИЛИ ") > 0 Then
LogicOperator = xlOr
ConditionArray = Split(UCase(cell.Value), " ИЛИ ")
Else
If InStr(1, UCase(cell.Value), " И ") > 0 Then
LogicOperator = xlAnd
ConditionArray = Split(UCase(cell.Value), " И ")
Else
ConditionArray = Array(cell.Text)
End If
End If
'формируем первое условие
If Left(ConditionArray(0), 1) = "<" Or Left(ConditionArray(0), 1) = ">" Then
Condition1 = ConditionArray(0)
Else
Condition1 = "=" & ConditionArray(0)
End If
'формируем второе условие - если оно есть
If UBound(ConditionArray) = 1 Then
If Left(ConditionArray(1), 1) = "<" Or Left(ConditionArray(1), 1) = ">" Then
Condition2 = ConditionArray(1)
Else
Condition2 = "=" & ConditionArray(1)
End If
End If
'включаем фильтрацию
If UBound(ConditionArray) = 0 Then
Target.Parent.Range(FilterRange.Address).AutoFilter Field:=FilterCol, Criteria1:=Condition1
Else
Target.Parent.Range(FilterRange.Address).AutoFilter Field:=FilterCol, Criteria1:=Condition1, _
Operator:=LogicOperator, Criteria2:=Condition2
End If
End If
Next cell
Set FilterRange = Nothing
Application.ScreenUpdating = True
End Sub
Кстати этот код работает только без общего доступа, в чем тоже не могу разобраться... Точнее он работает как то периодами... Не могу понять в чем проблема...