Шаг 27 - Инструкция If...Then...Else

Задает выполнение определенных групп инструкций в зависимости от значения выражения.

If условие Then [инструкции] [Else инструкции_else]


If условие Then
[инструкции]
[ElseIf условие-n Then
[инструкции_elseif] ...
[Else
[инструкции_else]]
End If

Параметры
условие
Обязательный. Одно или несколько выражений одного из двух типов: Числовое выражение или строковое выражение, имеющее значение True или False. Если аргумент условие имеет значение Null, то условие рассматривается как значение False. Выражение вида TypeOf имяОбъекта Is типОбъекта. Аргумент имяОбъекта может быть любой ссылкой на объект, а типОбъекта представлять любой допустимый тип объекта. Выражение имеет значение True, если объект имяОбъекта имеет тип объекта, указанный в аргументе типОбъекта; в противном случае выражение имеет значение False.
инструкции
Необязательный в блоковый форме; обязательный в строчной форме без предложения Else. Одна или несколько инструкций, разделяемых двоеточиями; выполняются, если условие имеет значение True.
условие-n
Необязательный. Аналогичен элементу условие.
инструкции_elseif
Необязательный. Одна или несколько инструкций, которые выполняются, если соответствующее условие-n имеет значение True.
инструкции_else
Необязательный. Одна или несколько инструкций, которые выполняются, если ни одно из предыдущих выражений условие или условие-n не имеет значение True.

Замечания
Простую однострочную форму рекомендуется использовать для коротких, простых проверок. Однако блочная форма обеспечивает более структурированный подход и большую гибкость по сравнению с однострочной формой. Блочная форма обычно проще для чтения, обработки и отладки.
Однострочная форма допускает выполнение нескольких инструкций в результате проверки одного условия If...Then, но все инструкции должны находиться на одной строке и разделяться двоеточием, как в следующем примере:

If A > 10 Then A = A + 1 : B = B + A : C = C + B

В блоковой форме инструкция If должна быть первой инструкцией в строке. Компоненты Else, ElseIf и End If могут иметь перед собой только номер строки или метку строки. Блок If должен заканчиваться инструкцией End If.
Для того чтобы определить, представляет инструкция блок If или нет, проверяется элемент, следующий за ключевым словом Then. Если после Then на той же строке стоит любой элемент, не являющийся комментарием, эта инструкция рассматривается как однострочная инструкция If.
Оба предложения Else и ElseIfIf допускается любое число предложений ElseIf, но ни одно такое предложение не может появляться после предложения Else. Допускаются вложенные блоки инструкций If; то есть блоки If, содержащиеся в других блоках.
При выполнении блока If (вторая форма синтаксиса), проверяется условие. Если условие имеет значение True, выполняются инструкции, следующие за Then. Если условие имеет значение False, то по очереди оценивается каждое условие ElseIf (если такие имеются). При обнаружении условия со значением True выполняются инструкции, непосредственно следующие за соответствующим предложением Then Если ни одно из условий ElseIf не имеет значение True (или предложения ElseIf отсутствуют), выполняются инструкции, следующие за Else. После выполнения инструкций, следующих за Then или Else, выполнение продолжается с инструкции, следующей за End If.
При оценке одного выражения, которое имеет несколько возможных значений, более полезной может оказаться конструкция Select Case. Однако предложение TypeOf имяОбъекта Is типОбъекта не может использоваться с инструкцией Select Case.

Пример
В данном примере показано использование как блоковой, так и однострочной форм инструкции If...Then...Else, а также проиллюстрировано использование инструкции If TypeOf...Then...Else.

Dim Number, Digits, MyString
Number = 53			' Инициализирует переменную.
If Number < 10 Then
	Digits = 1
ElseIf Number < 100 Then
				' Условие является истинным, поэтому выполняется следующая инструкция.
	Digits = 2
Else
	Digits = 3
End If
 Использует однострочную форму для присвоения значения.
If Digits = 1 Then MyString = "Один" Else MyString = "Больше 1" 

Использует конструкцию If TypeOf для определения, является ли элемент управления, переданный процедуре текстовым полем.

Sub ControlProcessor(MyControl As Control)
	If TypeOf MyControl Is CommandButton Then
		Debug.Print "Передан " & TypeName(MyControl)
	ElseIf TypeOf MyControl Is CheckBox Then
		Debug.Print "Передан " & TypeName(MyControl)
	ElseIf TypeOf MyControl Is TextBox Then
		Debug.Print "Передан " & TypeName(MyControl)
	End If
End Sub

Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Каев Артем.