Операторы
После операторов присваивания перейдем к рассмотрению операторов ветвления. Как и во многих языках программирования, в VBA имеются различные управляющие конструкции, позволяющие изменять порядок выполнения операторов программы. При отсутствии управляющих конструкций операторы программы выполняются последовательно, с первого до последнего. В некоторых простых случаях этого бывает достаточно, но обычно все-таки требуется изменить порядок выполнения операторов при выполнении определенных условий либо пропуская выполнение некоторых операторов, либо, наоборот, многократно повторяя их. Оказывается, для реализации любых алгоритмов достаточно иметь только два вида управляющих конструкций – ветвления и циклы. Первым из рассматриваемых нами операторов ветвления является стандартный условный оператор ветвления if…Then…Else. Его использование позволяет проверить некоторое условие и в зависимости от его истинности выполнить ту или иную группу операторов.
Замечание
Оператор If…Then…Else называют также условным оператором.
Для данного оператора есть два варианта синтаксиса – в одну строку и в несколько:
If
условие
Then
[блокОператоров1] [
Else
блокОператоров2]
…или:
If
условие1
Then
[блокОператоров 1] [
ElseIf
условием
Then
[блокОператоров N]...[
Else
[блокОператоров_Else]]
End
If
Но обо всем по порядку. После ключевого слова if стоит условие. В качестве условия можно использовать логическое выражение, возвращающее значение True или False. Также можно использовать арифметическое выражение, в этом случае нулевое его значение эквивалентно False, ненулевое – True. Если условие возвращает True, то выполняется блокОператоров1, если False – блокОператоров2, представляющий собой последовательность разделенных двоеточием операторов. Причем необходимо наличие хотя бы одного из блоков операторов.
Такова семантика первой формы записи (в одну строку), являющаяся частным случаем второй. Вторая же форма записи представляет развернутую цепочку ветвления, когда приходится делать выбор одного альтернативного действия из целой группы на основе проверки нескольких различных условий. В подобном случае также необходимо наличие хотя бы одного из блоков операторов.
Вторая схема действует по следующему принципу. Проверяется условие1. Если оно истинно, то выполняется блокоператоров1 и осуществляется переход к оператору, стоящему за ключевым словом End if. Если же оно ложно, то проверяется условие.? и т. д. Если проверка дошла до последнего оператора Eiseif и условием тоже оказывается ложным (то есть все вышестоящие условия ложны), выполняется блокОператоров_Еlse.
В программе 20.9 инициализируются три переменные а, ь и с. Далее показывается использование условного оператора в виде одной строки с использованием разделителя операторов – двоеточия. Поскольку проверяемое условие истинно, выполняются присваивание (с = c+1) и вывод (с = и).
В следующей конструкции проверяется условие (с > 20), т. к. условие ложно, то оператор присваивания (с = c+l) не выполняется. Далее проверяется условие (с = – а + b+ 1) – оно истинно, следовательно, выполняется вывод (с = 11). В противном случае вывелось бы "Не может быть" (что исключено).
Программа 20.9. Использование оператора if…Then…Else.
Sub
branch()
Dim
a, b, c
a = -10
b = 0
c = 10
If
c > a
Then
c = c + 1: MsgBox(c)
Else
a = a - 1: MsgBox(a)
If
c > 20
Then
c = c + 1
ElseIf
c = -a + b + 1
Then
MsgBox(c)
Else
MsgBox(
"Не может быть"
)
End
If
End
Sub
Вышерассмотренные цепочки операторов if…Then…Eiseif обладают большой гибкостью и позволяют решить все проблемы, однако если выбор одной из нескольких возможностей все время основан на различных значениях одного и того же выражения, гораздо удобнее использовать предназначенный для этого оператор выбора select case, имеющий следующий синтаксис:
Select
Case
выражение [
Case
списокЗначенийN[блокОператоровN]]...[
Case
Else
[блокОператоров_Else]]
End
Select
Проверяемое выражение вычисляется в начале работы оператора select case. Это выражение может возвращать значение любого типа – например логическое, числовое или строковое. При выполнении оператора Select case значение проверяемого выражения вычисляется один раз и запоминается.