Материал: Программирование на языке Visual Basic для приложений. Подвальный С.Л., Рог А.И

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

Оператор if.. .Then.. .Else - стандартный оператор ветвления. Его использование позволяет проверить некоторое условие и, в зависимости от его истинности, выполнить ту или иную группу операторов. Для данного оператора есть два варианта синтаксиса - в одну строку и в несколько:

If условие Then [блокОператоров1] [Else блокОператоров2]

ИЛИ

If условие1 Then [блокОператоров1]

…

[Else If условиеN Then [блокОператopoвN]

[Else

[блокОператopoв_Else]

End If

Начнем по порядку. После ключевого слова if стоит условие. В качестве условия можно использовать логическое выражение, возвращающее значение True или False. Также можно использовать арифметическое выражение: в этом случае нулевое его значение эквивалентно False, ненулевое - True. Если условие возвращает True, то выполняется блокоператоров1, если False - блокОператоров2, где блок операторов - это последовательность разделенных двоеточием операторов. Причем необходимо наличие хотя бы одного из блоков операторов. Таким образом, описывается первая схема, являющаяся частным случаем второй. Вторая же представляет развернутую цепочку ветвления, когда приходится делать выбор одного из целой группы альтернативных действий на основе проверки нескольких различных условий. В подобном случае также необходимо наличие хотя бы одного из блоков операторов.

Вторая схема действует по следующему принципу. Проверяется условие1 и, если оно истинно, выполняется блокопе-

63

раторов1 и осуществляется переход к оператору, стоящему за ключевым словом End if. Если же оно ложно, то проверяется условие2 и т. д. Если проверка дошла до последнего оператора Elseif и условием тоже оказывается ложным (т. е. все вышестоящие условия ложны), выполняется блокОператоров_Еlse.

Влистинге инициализируются три переменные а, b и с. Далее показывается использование условного оператора в виде одной строки с использованием разделителя операторов - двоеточия. Поскольку проверяемое условие истинно, то выполняется присваивание (с = c+1) и вывод (с = 11).

Вследующей конструкции проверяется условие (с > 20),

ит. к. условие ложно, то не выполняется оператор присваивания (с = c+1). Далее проверяется условие (с = -а+b+1) - оно истинно, следовательно, выполняется вывод (с = 11). В противном случае вывелось бы "Не может быть" (чего не может быть).

Листинг. Использование оператора if. . .Then.. .Else Sub pr1()

Dim a As Integer, b As Integer, с As Integer a = -10

b = 0 с = 10

If с > a Then с = с + 1: MsgBox(c) Else a = a - 1: MsgBox(a) If с > 20 Then

с = с + 1

ElseIf с = -a + b + 1 Then MsBox(c)

Else

MsgBox("He может быть") End If

End Sub

Функция IIf

В случае с простым ветвлением бывает удобно использование функции IIf которая имеет следующий формат:

64

IIf(выражение, значениеЕслиДа, значениеЕслиНет)

Эта функция проверяет значение выражения выражение: если оно истинно, то функция возвращает значение значениеЕслиДа, в противном случае - значениеЕслиНет.

Функция IIf является встроенной функцией и, как всякая функция, используется в выражении. Таким образом, функцию IIf удобно использовать, когда ветвление требуется в программе не для того, чтобы выбрать ту или иную альтернативную последовательность действий, а для того, чтобы присвоить то или иное альтернативное значение.

Пример:

D2 = IIf (I < 10, 250, 50)

Оператор Select Case

Если выбор одной из нескольких возможностей все время основан на различных значениях одного и того же выражения - гораздо удобнее использовать предназначенный для этого оператор выбора select Case, имеющий следующий синтаксис:

Select Case выражение

Case списокЗначений1 [блокОператоров 1]

…

[ Case списокЗначенийN [блокОператоровN] ]

[ Case Else

[блокОператоров_ Else]]

End Select

Проверяемое выражение вычисляется в начале работы оператора Select case. Это выражение может возвращать значение любого типа - например, логическое, числовое или строковое. При выполнении оператора select case - значение проверяемого выражения вычисляется один раз и запоминается. Далее идет список альтернатив, начинающихся ключевым словом

65

case. В каждой альтернативе указан список значений, представляющий собой несколько возможных значений, разделенных запятой. При выполнении оператора select Case значение сравнивается со списками значений альтернатив.

Элементы списка значений могут иметь одну из следующих форм:

1. Значение (в этом случае проверяется, совпадает ли значение про-

веряемого выражения с указанным значением); 2. Значение1 То Значение2

(в этом случае проверяется, находится ли значение проверяемого выражения в диапазоне указанных значений);

3. Is логическаяОперация значение

(в этом случае проверяется, удовлетворяет ли значение проверяемого выражения указанному логическому условию).

Вся конструкция работает следующим образом. Если хотя бы один из элементов списка значений соответствует проверяемому выражению, то выполняется соответствующий блок операторов, и на этом выполнение оператора select case заканчивается. Если же ни один из элементов всех списков альтернатив не соответствует значению проверяемого выражения, выполняется блокОператоров_ Else (если, конечно, присутствует ключевое слово Case Else).

В следующем примере при помощи функции inputBox переменной t присваивается некое значение, после чего посредством оператора select Case проверяются положительность значения переменной.

Листинг. Использование оператора select Case

Sub procLine() Dim t As Variant

t = InputBox("Введите число")

Select Case t Case 0

MsgBox("Введен О")

Case 1 To 100

66

MsgBox("Введено число > 0")

Case -100 To -1

MsgBox("Введено число < 0")

Case Else

MsgBox("Число слишком большое")

End Select

End Sub

Подобная конструкция, как упоминалось, возможна и для строковых значений - в таком случае используется лексикографическое упорядочивание.

Оператор GoTo

Помимо условных операторов, в VBA существует оператор безусловного перехода, который также меняет порядок выполнения операторов в программе (безусловно).

GoTo имяМетки

После ключевого слова идет имя метки. Метка - это идентификатор, приписанный оператору программы и используемый в других частях программы для обращения к этому оператору. Метка может быть определена как до, так и после ключевого оператора GOTO, причем она должна отделятся от помеченного ею оператора двоеточием. Нижеприведенный пример, вообще говоря, будет выполняться бесконечно. Мы специально приводим семантически неверную программу, чтобы подчеркнуть, как легко можно ошибиться при использовании оператора GOTO.

Листинг. Использование оператора GOTO

Sub branchLabel ()

Labe11: MsgBox("Использование метки")

GoTo Labe11 End Sub

Применение оператора безусловного перехода является нежелательным, поскольку присутствие этого оператора в программе нарушает ее структурную целостность и наглядность.

67

Источник: https://studfile.net/preview/16565567/