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