Оператор 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
См. также
- Директива If...Then...Else
- Использование операторов If...Then...Else
- Типы данных
- Операторы
- Глоссарий редактора Visual Basic (VBE)
Поддержка и обратная связь
Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.