
- •5Билет. Операторы
- •6Билет. Оператор ветвления по условию: правила записи и механизм. Вложения условий. Использование логических выражений.
- •Вопрос 7. Операторы цикла с предусловием и с постусловием While.. Wend и Do…While. Назначение, правила синтаксиса и механизм выполнения. Отличие между этими операторами. Примеры.
6Билет. Оператор ветвления по условию: правила записи и механизм. Вложения условий. Использование логических выражений.
Операторы условного и безусловного перехода
Операторы условного перехода — одни из самых важных и часто используе-мых элементов в языках программирования. Общий принцип их работы прост: проверяется соответствие каким-то условиям (истинность или ложность каких-либо выражений) и в зависимости от этого выполнение про-граммы направляется по одной или другой ветви. В VBA предусмотрено два оператора условного перехода: If...Then и Select Case.
Оператор If ... Then
Оператор If...Then — самый популярный у программистов. Полный его син-таксис выглядит так (необязательные части заключены в квадратные скобки):
If Условие Then
Команды1
[ElseIf УсловиеN Then
КомандыN]
[Else
Команды2]
End If
При этом:
Условие — выражение, которое проверяется на истинность. Если оно ис-тинно, то выполняются Команды1, если ложно — Команды2;
УсловияN — дополнительные условия, которые также можно проверить. В случае, если они выполняются (выражение УсловияN истинно), то вы-полняются КомандыN. Дополнительные условия (вместе с конструкцией ElseIf) можно повторять неограниченное количество раз, но если вам нужно реализовать проверку на соответствие большому количеству усло-вий, то правильнее будет использовать конструкцию Select Case (см. разд. 3.5.2).
Оператор If...Then применяется:
когда нужно проверить на одно условие и в случае соответствия сделать какое-то действие:
If nTemperature < 10 Then
MsgBox "Надеть куртку"
End If
когда нужно сделать то же, что и в предыдущем примере, а в случае несо-ответствия выполнить другое действие:
If nTemperature < 10 Then
MsgBox "Надеть куртку"
Else
MsgBox "Надеть ветровку"
End If
ность каких-либо выражений) и в зависимости от этого выполнение про-граммы направляется по одной или другой ветви. В VBA предусмотрено два оператора условного перехода: If...Then и Select Case.
когда нужно проверить на соответствие несколько условий (обратите вни-мание на использование логических операторов):
If (nTemperature < 10) And (bRain = True) Then
MsgBox "Надеть куртку и взять зонтик"
End If
в случае, когда проверка первого условия вернула False, нужно проверить на соответствие еще несколько условий (удобно использовать ElseIf):
If (bIGoInCar = True) Then
MsgBox "Одеться для машины"
ElseIf nTemperature < 10 Then
MsgBox "Надеть куртку"
Else
MsgBox "Можно идти в рубашке"
End If
В этом примере, поскольку bIGoInCar — переменная типа Boolean и сама по себе принимает значения True или False, первая строка может выгля-деть так:
If bIGoInCar Then ...
Приведу некоторые замечания по использованию If...Then:
ключевое слово Then должно находиться в одной строке с If и условием. Если вы перенесете его на следующую строку, будет выдано сообщение об ошибке;
если разместить команду, которую нужно выполнить при истинности про-веряемого условия, на одной строке с If и Then, то End If можно не писать:
If nTemperature < 10 Then MsgBox "Надеть куртку"
Если же вы используете несколько команд или конструкции Else/ElseIf, то End If в конце нужно писать обязательно, иначе возникнет синтаксиче-ская ошибка;
для выражения If...Then настоятельно рекомендуется использовать от-ступы для выделения блоков команд. Иначе читать код будет трудно;
операторы If...Then можно вкладывать друг в друга:
If MyVar = 5 Then
MsgBox "MyVar = 5"
If MyVar = 10 Then
MsgBox "MyVar = 10"
End If
End If
Оператор Select Case
Оператор Select Case идеально подходит для проверки одного и того же зна-чения, которое нужно много раз сравнить с разными выражениями. Синтак-сис его очень прост:
Select Case Выражение
Case Условие1
Команды1
[Case УсловиеN
КомандыN]
[Case Else
Команды2]
End Select
Например:
Select Case sDayOfWeek
Case "Понедельник"
MsgBox "Салат из шпината"
Case "Вторник"
MsgBox "Салат из морской капусты"
Case Else
MsgBox "На этот день у нас ничего не предусмотрено"
End Select
Приведу некоторые замечания по поводу Select Case:
строка:
Case "Понедельник"
на самом деле означает:
Case sDayOfWeek = "Понедельник"
Такое равенство подразумевается по умолчанию. Но вы можете использо-вать и другой оператор сравнения или целый набор операторов, например:
Case 0 To 5, 15, Is > 55
Такое выражение можно перевести как "Если проверяемое выражение по-пало в диапазон от 0 до 5 включительно, или равно 15, или больше 55".
Слово Is при этом можно пропустить — компилятор VBA добавит это ключевое слово за вас. Несколько критериев в Case перечисляются через запятые и объединяются так, как работает оператор Or, т. е. выполнение пойдет по этой ветви, если тестируемое значение будет удовлетворять хо-тя бы одному из критериев;
при использовании диапазона (0 To 5) включаются и границы диапазона (в данном случае 0 и 5).
Оператор GoTo Оператор GoTo — это оператор безусловного перехода, когда ход выполнения программы без проверки каких-либо условий перепрыгивает на метку в коде. Пример использования GoTo может выглядеть так:
GoTo EngineNotStarted
...
EngineNotStarted:
MsgBox "Едем на метро"
...
Здесь EngineNotStarted: — это метка, для нее используется имя (выбираемое по правилам назначения имен для переменных), которое оканчивается двое-точием. Эта метка может находиться как до, так и после оператора GoTo. В любом случае, при выполнении оператора GoTo ход выполнения "пере-прыгнет" на указанную в GoTo метку.
Иногда использование GoTo очень удобно, например, когда нам нужно доби-ваться от пользователя ввода правильного значения неизвестное число раз. Однако использовать GoTo категорически не рекомендуется, потому что код становится трудночитаемым. Чаще всего GoTo можно заменить на конструк-цию Do While...Loop (см. разд. 3.6) или на вызов функции из самой себя.