Оператор If...Then...Else

Выполняет один или группу операторов в зависимости от значения выражения.

Синтаксис

IfconditionThen [ statements ] [ Elseelsestatements ]

Также можно использовать синтаксис вложенных операторов:

ЕслиусловиеТогда
[ операторы ]
[ ElseIfcondition-nThen
[ elseifstatements ]]
[ Else
[ elsestatements ]]
End If

Если... Затем... Синтаксис инструкции Else содержит эти части.

Part Описание
Состояние Обязательно. Одно или оба таких выражения:

Числовое выражение или строковое выражение, оцененное как True либо False. Если условие имеет значение Null, условие обрабатывается как False.

Выражение формы TypeOfobjectnameIsobjecttype. Objectname — это любая ссылка на объект, а objecttype — любой допустимый тип объекта. Выражение имеет значение True, если objectname относится к типу объекта, заданному типом objecttype; В противном случае имеет значение False.
Операторы Необязательный элемент в форме блока; является обязательным при использовании однострочного оператора без предложения Else. Операторы разделяются двоеточием; выполняется, если значение condition имеет значение True.
condition-n Необязательный параметр. То же самое, что и condition.
elseifstatements Необязательный параметр. Один или несколько операторов, которые выполняются, если соответствующее им значение condition-n равняется True.
elsestatements Необязательный параметр. Один или несколько операторов, которые выполняются, если значения ни выражения condition, ни выражения condition-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 и ElseIf являются необязательными. Можно использовать сколько угодно частей ElseIf в блоке If, но они не должны стоять после Else. Блоки оператора If могут быть вложенными, то есть содержать внутри другие.

При выполнении блока If (второй синтаксис) проверяется значение condition. Еслиcondition является True, тогда выполняются операторы, стоящие после Then. Если condition равняется False, каждое условие ElseIf (если такое имеется) оценивается по порядку. При обнаружении условия со значением True выполняются операторы, следующие за относящейся к ним части Then. Если ни одно из значений, следующих за ElseIf, не равняется True (или если отсутствует ElseIf), выполняются операторы, следующие за Else. После выполнения операторов, следующих за Then либоElse, выполняются операторы после End If.

Совет

Выбор варианта Case может оказаться более полезным при оценке одного выражения с несколькими возможными действиями. Однако предложение TypeOfobjectnameIsobjecttype нельзя использовать с инструкцией Select Case .

Примечание.

TypeOf невозможно использовать с такими типами данных, как Long, Integer ( кроме Object).

Пример

В этом примере показаны как блочная форма оператора If...Then...Else, так и его однострочное написание. В нем также показано использование оператора If TypeOf...Then...Else.

Dim Number, Digits, MyString 
Number = 53 ' Initialize variable. 
If Number < 10 Then 
 Digits = 1 
ElseIf Number < 100 Then 
' Condition evaluates to True so the next statement is executed. 
 Digits = 2 
Else 
 Digits = 3 
End If 
 
' Assign a value using the single-line form of syntax. 
If Digits = 1 Then MyString = "One" Else MyString = "More than one" 

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

Sub ControlProcessor(MyControl As Control) 
 If TypeOf MyControl Is CommandButton Then 
 Debug.Print "You passed in a " & TypeName(MyControl) 
 ElseIf TypeOf MyControl Is CheckBox Then 
 Debug.Print "You passed in a " & TypeName(MyControl) 
 ElseIf TypeOf MyControl Is TextBox Then 
 Debug.Print "You passed in a " & TypeName(MyControl) 
 End If 
End Sub

См. также

Поддержка и обратная связь

Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.