End Function
End Sub
End If
Else
Next
MsgBox "У Вас есть доступ ко всем листам этой книги."
Elself Password = "level2" Then
ActiveWorkbook.Worksheets(l). _
Visible = True
ActiveWorkbook.Worksheets(1). _
Unprotect
MsgBox "У Вас есть доступ только к 1-му листу книги."
Elself Password = "level3" Then
ActiveWorkbook.Worksheets(l).Visible = True
MsgBox "Вам доступен для чтения первый лист."
MsgBox "Пароль введен неверно. Попробуйте ещё раз!"
Function GetPassword()
GetPassword = LCase(InputBox _
("Введите пароль:", "Password"))
ЗАМЕЧАНИЯ. 1. Во 2-й строке функции GetPassword используется встроенная функция LCase, которая преобразует все буквы переданной в нее строки в строчные.
2. Чтобы не отображать символы пароля на экране при его вводе, придется сконструировать форму с текстовым полем. Подробнее см. пример создания формы для ввода пароля на с. 141.
В программе IfThenElseIf ключевое слово Elself с последующим условием используется дважды. Новое условие вносит в порядок выполнения команд дополнительные изменения, если проверка первого условия закончилась неудачей. Первое условие указано сразу за ключевым словом If. В нем проверяется равенство переменной Password строке "level1". Если переменная не равна строке, VBA переходит к первому ключевому слову Elself, где проверяет следующее условие – равенство переменной Password строке "level2". Начиная с этого момента, программа использует только новое условие, «забывая» о старом. Если равенства опять нет, управление переходит к следующему ключевому слову Elself и т.д.
|
|
Просматривая IfThenElseIf, вы, вероятно, обратили внимание на несколько интересных моментов. В блоке, начинающемся сразу за ключевым словом If, помещен цикл For-Each-Next. В этом цикле перебираются все листы активной рабочей книги, с каждой из которых выполняются два действия: свойству Visible присваивается значение и вызывается метод Unprotect. Первое действие позволяет пользователю выделить лист, второе снимает с листа защиту паролем. У метода Unprotect есть один аргумент – строка с паролем. Но в данном случае пароль для защиты листов мы не использовали, поэтому Unprotect вызван без аргументов. В других блоках программы свойство Visible и метод Unprotect вызываются выборочно, в зависимости от введенного пароля.
Структура Select Case позволяет в зависимости от значения переменной или выражения выполнять один из нескольких фрагментов кода. Ее действие подобно действию структуры If-Then-Else, в которой условие переопределяется ключевым словом Elself. В программе IfThenElseIf мы использовали инструкцию If-Then-Else для определения прав пользователя согласно введенному им паролю. В следующей программе те же действия выполняются средствами структуры Select Case:
|
|
Sub SelectCase()
Dim Password As String
Dim Sheet As Object
Password = LCase(InputBox("Введите пароль:", _
"Password"))
Select Case Password
Case "level1"
For Each Sheet In ActiveWorkbook.Sheets
Sheet.Visible = True
Sheet.Unprotect