Операторы альтернативы (ветвления)
Как и в любом другом языке программирования, в VBA можно проверять условия и выполнять действия в соответствии с результатами проверки условий. Для данной цели применяются следующие операторы (инструкции) принятия решения.
Условный оператор
IF<условие> THEN <оператор (код)>
Позволяет выполнить один или несколько операторов, если условие истинно. Можно использовать однострочный или блочный вариант. Если необходимо выполнить более одной строки кода, нужно использовать блочный вариант с оператором EndIF.
Синтаксис:
IF<условие> Then<оператор (код)>
IF<условие> Then
<блок кода >
End IF
Примеры:
IF x<10 Then z=0
IF x>10 Then
z=2
z=z+x
EndIF
Позволяет определить два блока операторов. Первый выполняется, когда условие истинно, а второй, когда оно ложно.
Пример:
IF x<>0 Then
y=Sin(x)/x
Else
y=1
EndIF
Пример ветвления по трём и более направлениям:
IF<условие 1> Then
<блок кода 1>
ElseIF<условие 2> Then
<блок кода 2>
ElseIF<условие 3> Then
<блок кода 3>
Else<блок кода 4>
EndIF
В блоке IFдопускается любое количество предложений ElseIF, но ни одно не может находиться после предложения Else.
Пример:
IF x=-1.57 Then
y=-1
ElseIF x=0 Then
y=0
ElseIF x=1.57 Then
y=1
Else y=Sin(x)
EndIF
9.3.4.2. Оператор выбора варианта
При выборе для выполнения одного из нескольких операторов (блоков операторов) целесообразно и удобно использовать инструкцию Select Case
<pСинтаксис
Select Case< переменная или выражение>
Case <значение 1>
<оператор (блок операторов) 1>
Case <значение 2>
<оператор (блок операторов) 2>
Case <значение 3>
<оператор (блок операторов) 3>
End Select
Пример применения оператора выбора в подпрограмме-функции:
Function PR(ByVal S As Single, ByVal P As Integer) As Single
Select Case P
Case 0
PR=S*0
Case 1
PR=S*0.10
Case 2
PR=S*0.15
Case 3
PR = S*0.20
End Select
End Function
Sub Krb()‘Пример программы, показывающий вызов подпрограммы функции<
Dim S As Single
Dim Sum As Single
Dim P As Integer
Dim Prom As Variant
S = 5000
Prom = InputBox(“Введите номер варианта <от 0 до 5>”)
IF Not IsNumeric(Prom) Then MsgBox(“Повторите ввод!”)
Loop Until IsNumeric(Prom)
P = Prom
Sum=PR(S,P) ‘Вызов процедуры-функции. Оператор вызова PR(S,P).
MsgBox(“Значение S=”) & CSng(S)
End Sub
Допускается вложенность инструкций Select Case. При этом каждой вложенной инструкции Select Case должна соответствовать инструкция End Select.
Операторы циклов
DO LOOP
Позволяет выполнить блок кода неопределенное количество раз. Существует несколько вариантов этого оператора, но в каждом из них проверяется условие и по результатам проверки определяется необходимость продолжения цикла. Результатом логического выражения условия должно быть True или False.
Циклы с предусловием
DO WHILE <условие> … LOOP
Оператор DO WHILE <условие> … LOOP позволяет проверить условие перед началом цикла и выполнять цикл до тех пор, пока оно имеет значение True. Как только условие цикла примет значение False, выполнение цикла прекратится.
Пример:
Dim X As Integer ‘Описание переменной X целого типа.
X=0 ‘Начальное значение переменной X.
DO WHILE X<=10 ‘Пока Х<=10, цикл будет повторятся.
X=X+1 ‘Изменение значения переменной Х.
LOOP ‘Конец цикла.
Другой вариант инструкции такого цикла:
WHILE <условие>… WEND
Пример:
X=0
WHILE X<12
y=Cos(x)
X=X+1
WEND
DO UNTIL <условие> … LOOP
Оператор Do Until <условие> … Loop позволяет проверить условие перед началом цикла и выполнять цикл до тех пор, пока оно False. Как только условие цикла станет равно True, выполнение цикла прекратится.
Пример:
Dim X As Integer ‘Описание переменной X целого типа.
X=0 ‘Начальное значение переменной X.
Do Until X>10‘Пока Х<=10, цикл будет повторятся.
X=X+1 ‘Изменение значения переменной Х.
LOOP ‘Конец цикла.
Циклы с постусловием
DO … LOOP WHILE <условие>
Если операторы цикла необходимо выполнить хотя бы раз, то нужно применять цикл с постусловием.
Инструкция Do … Loop While <условие> позволяет проверить условие после выполнения операторов тела цикла.
Цикл будет повторяться до тех пор, пока выражение в условии цикла имеет значение True. Как только условие цикла примет значение False, выполнение цикла прекратится.
Пример:
Dim X As Integer
X=0
Do
X=X+1
Loop While X<=10‘До тех пор, пока Х<=10, цикл повторяется
DO … LOOP UNTIL <условие>
В отличие от предыдущего этот цикл будет выполняться до тех пор, пока значение условия равно False.
Пример:
Dim X As Integer
X=0
Do
X=X+1
Loop Until X>10‘Как только переменная станет больше десяти, выполнение цикла прекратится.