Страница 1 из 1
Пароль на защиту листа
Добавлено: 20 янв 2011, 13:46
AlexGvozdev
Добрый день.
Помогите, пожалуйста заполнить пробел в коде.
Необходимо узнать как можно проверить установлен ли пароль на защищенном листе.
Код: Выделить всё
If sh.ProtectContents Then 'если лист защищен
If ... Then 'условие должно проверять есть ли пароль на листе или он защищен без пароля
pass = InputBox(Prompt:="Введите пароль")
sh.Unprotect Password:=pass
Else
sh.Unprotect
End If
И еще вопрос, можно ли как нить сделать, чтобы когда вводили пароль, через InputBox, то выводились за место символов звездочки *.
Заранее спасибо!!!!
Re: Пароль на защиту листа
Добавлено: 20 янв 2011, 19:51
nilem
А зачем? Просто пишем sh.Unprotect. Если лист защищен с паролем, то появится окно ввода пароля; если защита без пароля - лист просто разблокируется.
Re: Пароль на защиту листа
Добавлено: 21 янв 2011, 09:20
AlexGvozdev
Так конечно можно было бы сделать, но есть пару нюансов.
- Как мне тогда, после выполнения процедуры, защитить лист под таким же паролем.
- А если не делать проверку, если там пароль, то может быть вот такая ситуация. Пароля на защиту не было, лист был просто защищен, а после того как выскочит окно, о том что необходимо ввести пароль и пользователь введет туда что нибудь, то будет как бы сказать не приятно
, так как защита с листа снимется, а код сохранит пароль в переменную, и как только программа дойдет до того места где надо ставить защиту обратно, она поставит защиту с паролем, который указал пользователь в самом начале. И получится, был лист без пароля, а стал с паролем
.
Re: Пароль на защиту листа
Добавлено: 21 янв 2011, 10:57
nilem
AlexGvozdev писал(а): Пароля на защиту не было, лист был просто защищен, а после того как выскочит окно, о том что необходимо ввести пароль ...
Ну нет, так не должно быть. Если на листе стоит защита без пароля, то и запрос на ввод пароля не появляется. Попробуйте:
Код: Выделить всё
Sub WithoutParol()
ActiveSheet.Unprotect
MsgBox "Лист разблокирован без пароля"
'тут какой-то код
ActiveSheet.Protect
MsgBox "Опять заблокирован без пароля"
End Sub
Если лист защищен с паролем, то этот же пароль потом и ставим:
Код: Выделить всё
Sub WithParol()
ActiveSheet.Unprotect Password:="111"
MsgBox "Лист разблокирован с паролем"
'тут какой-то код
ActiveSheet.Protect Password:="111"
End Sub
Или вы хотите разблокировать лист с неизвестным паролем, чтобы польз-ль сам его вводил?
Re: Пароль на защиту листа
Добавлено: 21 янв 2011, 13:59
AlexGvozdev
nilem писал(а):Или вы хотите разблокировать лист с неизвестным паролем, чтобы польз-ль сам его вводил?
Да именно так.
А чтобы пароль вводить в код программы, такой вариант не подходит, т.к. данный файл будет разослан нескольким персонам, и каждый файл должен иметь разные пароли. А персон этих около 200

, по этому не очень охота в каждом файле прописывать пароль в коде

.
Re: Пароль на защиту листа
Добавлено: 03 фев 2011, 08:26
mc-black
Не до конца понял, что именно вам надо получить в итоге, но могу сказать, что защита листа с паролем легко обходится. по крайней мере это работает в версии 2003 - в других не проверял. При этом вы точно не узнаете исходный пароль, но сможете восстановить защиту тем же паролем.
Просто пароль защиты листа снимается методом Unprotect:
expression.Unprotect(Password)
...
Password Optional Variant. A string that denotes the case-sensitive password to use to unprotect the sheet or workbook. If the sheet or workbook isn't protected with a password, this argument is ignored. If you omit this argument for a sheet that's protected with a password, you'll be prompted for the password. If you omit this argument for a workbook that's protected with a password, the method fails.
Обратите внимание, что пароль типа Variant, а передаем мы туда обычно строку. Защиту можно снять, просто пробутфорсив другой тип данных...