powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / фильтрация и защита на листе
13 сообщений из 13, страница 1 из 1
фильтрация и защита на листе
    #38957885
требуется сделать поиск по столбцу в защищенном на изменение листе, решил реализовать на фильтрах

Код: vbnet
1.
ActiveSheet.Range("$A:$A").AutoFilter Field:=1, Criteria1:="*" + SearchTb.Text + "*"



в итоге не получается 2 вещи:
установить пароль на лист с возможностью поиска (через фильтры)

искать строки/подстроки, состоящие из одних и тех же цифр (например 333)

Листинг в полном объеме:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
Private Sub BlockBtn_Click()
    On Error GoTo ThereWasBadCalculation
    If Sheets(1).ProtectContents Then
        Sheets(1).Unprotect
        Exit Sub
    Else
        passwd = InputBox("Please, enter password: ", "Setup passwd", "")
        Sheets(1).Protect Password:=passwd, AllowFiltering:=True, UserInterfaceOnly:=True
        Exit Sub
    End If
ThereWasBadCalculation:
        MsgBox "There was a problem when performing the calculation"
End Sub

Private Sub SearchTb_KeyUp(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
    On Error GoTo ThereWasBadCalculation
    Sheets(1).Unprotect
    ActiveSheet.Range("$A:$A").AutoFilter Field:=1, Criteria1:="*" + SearchTb.Text + "*" ', Criteria2:=TextBox1.Text, Operator:=xlOr
    If SearchTb.TextLength = 0 Then ActiveSheet.ShowAllData
    Sheets(1).Protect
    Exit Sub
ThereWasBadCalculation:
        MsgBox "There was a problem when performing the calculation"
End Sub



Что примечательно: если файл не закрывать и установить пароль - работает как нужно с возможностью фильтрации, а если перезапустить, то как-будто excel не помнит про AllowFiltering:=True

Уважаемые форумчане, помогите осилить сиё тяжкое бремя
файл приложил
...
Рейтинг: 0 / 0
фильтрация и защита на листе
    #38957999
Кострюков Артёмфайл приложил
упс... файл не подцепился =(
завтра приложу
...
Рейтинг: 0 / 0
фильтрация и защита на листе
    #38958036
Фотография The_Prist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кострюков Артёмесли файл не закрывать и установить пароль - работает как нужно с возможностью фильтрации, а если перезапустить, то как-будто excel не помнит про AllowFiltering:=TrueНе помнит код про UserInterfaceOnly. А AllowFiltering работает. Только вот метод AutoFilter еще и устанавливает фильтр, а не только меняет условия фильтрации. А AllowFiltering допускает лишь изменение условий, но не установку фильтра. Видимо, при вызове из VBA данного метода Excel полагает, что фильтр пытаются установить, а не просто изменить условия.
Чтобы UserInterfaceOnly работал нормально необходимо защиту устанавливать при открытии книги, т.е. на событие Workbook_Open. Тогда все будет работать.
...
Рейтинг: 0 / 0
фильтрация и защита на листе
    #38958208
The_Prist, увы...
попытка №2 в аплоуде файла =)
...
Рейтинг: 0 / 0
фильтрация и защита на листе
    #38958372
Фотография The_Prist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кострюков Артём,

А зачем у Вас там Sheets(1).Unprotect и Sheets(1).Protect? Вы для чего UserInterfaceOnly используете? При таком подходе конечно работать не будет.
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
Private Sub SearchTb_KeyUp(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
    On Error GoTo ThereWasBadCalculation
    ActiveSheet.Range("$A:$A").AutoFilter Field:=1, Criteria1:="*" + SearchTb.Text + "*" ', Criteria2:=TextBox1.Text, Operator:=xlOr
    If SearchTb.TextLength = 0 Then ActiveSheet.ShowAllData
    Exit Sub
ThereWasBadCalculation:
        MsgBox "There was a problem when performing the calculation"
End Sub
...
Рейтинг: 0 / 0
фильтрация и защита на листе
    #38958410
The_PristКострюков Артём,

А зачем у Вас там Sheets(1).Unprotect и Sheets(1).Protect? Вы для чего UserInterfaceOnly используете? При таком подходе конечно работать не будет.



The_Prist, в случае перезапуска файла модификатор AllowFiltering отсутствует и требуется пароль для дальнейшей работы, вот и вставил сие чудо дабы избежать надписи "There was a problem when performing the calculation", на самом деле Unprotect-Protect здесь лишние. Как Вы и рекомендовали, я поставил установку пароля на открытие книги - не помогло =(, после перезапуска снова нужен пароль

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
Private Sub Workbook_Open()
...
If Not (Sheets(1).ProtectContents) Then
    passwd = InputBox("Please, enter password: ", "Setup passwd", "")
    Sheets(1).Protect Password:=passwd, AllowFiltering:=True, UserInterfaceOnly:=True
End If
End Sub



И я не могу понять почему из списка {33f, 334, g3g, 333} можно выделить любой элемент, кроме 333
...
Рейтинг: 0 / 0
фильтрация и защита на листе
    #38958452
Фотография The_Prist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кострюков Артём,

Вы не заметили, что окно запроса пароля у Вас не появляется? Знаете почему? Потому что проверка на защиту листа идет. А она лишняя, т.к. лист всегда защищен и строка установки защиты не срабатывает. Следовательно при каждом запуске файла у Вас не устанавливается защита на лист(и параметр UserInterfaceOnly тоже не применяется). Если записать так:
Код: vbnet
1.
2.
3.
4.
5.
Private Sub Workbook_Open()
'УбратьВсё
    passwd = InputBox("Please, enter password: ", "Setup passwd", "")
    Sheets(1).Protect Password:=passwd, AllowFiltering:=True, UserInterfaceOnly:=True
End Sub


то все будет работать.
...
Рейтинг: 0 / 0
фильтрация и защита на листе
    #38958475
The_PristКострюков Артём,

Вы не заметили, что окно запроса пароля у Вас не появляется? Знаете почему? Потому что проверка на защиту листа идет.
Не согласен. У меня проверка выполняется корректно, один раз пароль поставил, при 3 последующих запусках запроса на пароль не было.
Кстати эта проверка есть в файле , который я ранее выкладывал, можете попробовать!

единственный нюанс - после установки пароля файл нужно сохранить ;)
...
Рейтинг: 0 / 0
фильтрация и защита на листе
    #38958489
Фотография The_Prist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кострюков АртёмНе согласенЕстественно. Вы же прочитали не то, что было написано. Проверка корректно выполняется, я с этим согласен. И именно об этом написал. Что делает проверка? Проверяет - установлена ли защита на лист. Если установлена - то защита не ставится. А она при открытии файла установлена и следовательно не устанавливается заново. А параметр UserInterfaceOnly необходимо устанавливать каждый раз при открытии книги иначе он сбрасывается и ничего работать не будет. Так яснее?
...
Рейтинг: 0 / 0
фильтрация и защита на листе
    #38958540
The_PristКострюков АртёмНе согласенЕстественно. Вы же прочитали не то, что было написано. Проверка корректно выполняется, я с этим согласен. И именно об этом написал. Что делает проверка? Проверяет - установлена ли защита на лист. Если установлена - то защита не ставится. А она при открытии файла установлена и следовательно не устанавливается заново. А параметр UserInterfaceOnly необходимо устанавливать каждый раз при открытии книги иначе он сбрасывается и ничего работать не будет. Так яснее?

это то все понятно. не понятно одно - пользователь должен каждый раз вводить пароль при запуске книги? т.е. те пользователи, у которых не должно быть доступа на запись, вводят пароль и ограничивают себе доступ =) интересное получается кино... знают ли они пароль? думаю это уже риторика...

Суть в ограничении доступа на запись "оператору", а "администратор" книги, когда потребуется анлочит ее и забъет туда еще что-нибудь
...
Рейтинг: 0 / 0
фильтрация и защита на листе
    #38958590
Фотография The_Prist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кострюков Артём,

так Вы тогда изначально логику файла продумайте нормально. Распределите роли. Иначе как программа будет понимать кто админ, а кто нет? В каком случае запросить пароль, а в каком нет? Вы сами создаете трудности программе и себе.
Плюс ко всему, Вы явно опять ничего не попробовали и не разобрались. Пароль на лист какой должен быть? Установите статичный и при открытии книги устанавливайте его при открытии. А админу этот пароль сообщиет и путь при необходимости снимает руками защиту и вносит изменения.
...
Рейтинг: 0 / 0
фильтрация и защита на листе
    #38958662
The_Prist, пароль в скрипте это, конечно, очевидная вещь, но хотелось бы как-нибудь поизящнее, но стандартными средствами - без хардкодерства. Так сказать дешево и сердито.
Логика по правке файла очень проста.
Первый запуск - установил пароль, сделал изменения, сохранился.
Второй запуск уже делает юзверь с доступом на чтение.
N-ый запуск. Как только потребовалось поправить файл - запустил файл, снял пароль, поправил, поставил новый.
И в идеале реализацию не на уровне NTFS ACL, а в рабочей книге средствами Excel (без "вшитого" в код пароля)
...
Рейтинг: 0 / 0
фильтрация и защита на листе
    #38958771
Фотография The_Prist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кострюков Артём,

Ну раз дешево и сердито - так и снимайте нормально защиту перед поиском и устанавливайте тоже правильно.
А то при открытии установка защиты идет такая:
Код: vbnet
1.
Sheets(1).Protect Password:=passwd, AllowFiltering:=True, UserInterfaceOnly:=True


а после поиска:
Код: vbnet
1.
Sheets(1).Protect


ни пароля, ни разрешения на фильтрацию...Чего удивляться-то потом, что не работает?
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / фильтрация и защита на листе
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]