Выполнение команд по условию (ветвление)
Операторы условного перехода (операторы ветвления) — одни из самых важных и часто используемых элементов в языках программирования. Общий принцип их работы прост: проверяется соответствие каким-то условиям (истинность или ложность каких-либо выражений) и в зависимости от этого выполнение программы направляется по одной или другой ветви. В VBA предусмотрено два оператора условного перехода: If...Then и Select Case.
6.1 Оператор If ... Then
Оператор If...Then — самый популярный у программистов. Полный его синтаксис выглядит так (необязательные части заключены в квадратные скобки):
If Условие Then
Команды1
[ElseIf УсловиеN Then
КомандыN]
[Else
Команды2]
End If
При этом:
q Условие — выражение, которое проверяется на истинность. Если оно истинно, то выполняются Команды1, если ложно — Команды2;
q УсловияN — дополнительные условия, которые также можно проверить. В случае, если они выполняются (выражение УсловияN истинно), то выполняются КомандыN. Дополнительные условия (вместе с конструкцией ElseIf) можно повторять неограниченное количество раз, но если вам нужно реализовать проверку на соответствие большому количеству условий, то правильнее будет использовать конструкцию Select Case.
Оператор If...Then применяется:
q когда нужно проверить на одно условие и в случае соответствия сделать какое-то действие:
If nTemperature < 10 Then
MsgBox "Надеть куртку"
End If
q когда нужно сделать то же, что и в предыдущем примере, а в случае несоответствия выполнить другое действие:
If nTemperature < 10 Then
MsgBox "Надеть куртку"
Else
MsgBox "Надеть ветровку"
End If
q когда нужно проверить на соответствие несколько условий (обратите внимание на использование логических операторов):
If (nTemperature < 10) And (bRain = True) Then
MsgBox "Надеть куртку и взять зонтик"
End If
q в случае, когда проверка первого условия вернула 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:
q ключевое слово Then должно находиться в одной строке с If и условием. Если вы перенесете его на следующую строку, будет выдано сообщение об ошибке;
q если разместить команду, которую нужно выполнить при истинности проверяемого условия, на одной строке с If и Then, то End If можно не писать:
If nTemperature < 10 Then MsgBox "Надеть куртку"
Если же вы используете несколько команд или конструкции Else/ElseIf, то End If в конце нужно писать обязательно, иначе возникнет синтаксическая ошибка;
q для выражения If...Then настоятельно рекомендуется использовать отступы для выделения блоков команд. Иначе читать код будет трудно;
q операторы If...Then можно вкладывать друг в друга:
If MyVar = 5 Then
MsgBox "MyVar = 5"
If MyVar = 10 Then
MsgBox "MyVar = 10"
End If
End If
6.2 Оператор 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:
q строка:
Case "Понедельник"
на самом деле означает:
Case sDayOfWeek = "Понедельник"
Такое равенство подразумевается по умолчанию. Но вы можете использовать и другой оператор сравнения или целый набор операторов, например:
Case 0 To 5, 15, Is > 55
Такое выражение можно перевести как "Если проверяемое выражение попало в диапазон от 0 до 5 включительно, или равно 15, или больше 55".
Слово Is при этом можно пропустить — компилятор VBA добавит это ключевое слово за вас. Несколько критериев в Case перечисляются через запятые и объединяются так, как работает оператор Or, т. е. выполнение пойдет по этой ветви, если тестируемое значение будет удовлетворять хотя бы одному из критериев;
q при использовании диапазона (0 To 5) включаются и границы диапазона (в данном случае 0 и 5).