После включения защиты кнопка автофильтра даже не нажимается
Пользователь
Сообщений: Регистрация: 17.01.2014
ПОЛ: МУЖСКОЙ | Win10x64, MSO2019x64
27.11.2015 14:09:35
Dex, изучите все параметры защиты, в частности, AllowFiltering.
Формула массива (ФМ) вводится Ctrl+Shift+Enter Memento mori
Пользователь
Сообщений: Регистрация: 15.09.2012
Профессиональная разработка приложений для MS Office
27.11.2015 14:16:45
Здесь нюанс: AllowFiltering разрешает работу с уже установленными фильтрами. Но не разрешает устанавливать или удалять фильтр. Т.е. сначала надо установить фильтр, потом установить защиту. Пользователь сможет фильтровать данные, но не сможет удалить фильтр или изменить диапазон для фильтра.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Пользователь
Сообщений: Регистрация: 06.11.2015
27.11.2015 15:49:08
Цитата
The_Prist написал: Т.е. сначала надо установить фильтр, потом установить защиту. Пользователь сможет фильтровать данные, но не сможет удалить фильтр или изменить диапазон для фильтра.
Что то я не совсем понял. Что мне сделать то нужно? Убрать этот параметр? Убрать защиту? Убрать автофильтр?
В этой же книге у меня работает макрос, может с ним связанно?
Взято из темы После установки защиты макрос тоже не работает
Код
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
Кстати этот код работает только без общего доступа, в чем тоже не могу разобраться... Точнее он работает как то периодами... Не могу понять в чем проблема...
Изменено: - 27.11.2015 18:09:26
Пользователь
Сообщений: Регистрация: 06.11.2015
30.11.2015 10:53:47
Он не работает, когда я ставлю защиту листа!
Пользователь
Сообщений: Регистрация: 15.09.2012
Профессиональная разработка приложений для MS Office
30.11.2015 11:00:14
Проще в самом начале кода снимать защиту, а в конец ставить. Код выше использует AutoFilter, который не может быть использован при защите листа.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Пользователь
Сообщений: Регистрация: 06.11.2015
30.11.2015 13:30:10
Цитата
The_Prist написал: Проще в самом начале кода снимать защиту, а в конец ставить.
А в моем коде где его поставить? Между этих строк?
Код
Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, Range("Условие")) Is Nothing Then Exit Sub