Выполнение команд по условию (ветвление)

Операторы условного перехода (операторы ветвления) — одни из самых важных и часто используемых элементов в языках программирования. Общий принцип их работы прост: проверяется соответствие каким-то условиям (истинность или ложность каких-либо выражений) и в зависимости от этого выполнение программы направляется по одной или другой ветви. В 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).