If...Then...Else 语句

根据表达式的值,有条件地执行一组语句

语法

IfconditionThen [ statements ] [ Elseelsestatements ]

或者,可以使用块格式语法:

如果条件Then
[ 语句 ]
[ ElseIfcondition-nThen
[ elseifstatements ]]
[ Else
[ elsestatements ]]
End If

If...然后。。。Else 语句语法包含以下部分。

Part 说明
条件 必填。 一个或多个以下两种类型的表达式:

计算结果为 True 或 False 的数值表达式字符串表达式。 如果 condition 为 Null, 则 condition 被视为 False

TypeOfobjectnameIsobjecttype 窗体的表达式。 objectname 是任何对象引用,objecttype 是任何有效的对象类型。 如果 objectnameobjecttype 指定的对象类型,则表达式为 True;否则为 False
statements 在块格式中为可选;在没有 Else 子句的单行格式中为必需。 由冒号分隔的一个或多个语句;在 conditionTrue 时执行。
condition-n 可选。 与 condition 相同。
elseifstatements 可选。 在关联的 condition-nTrue 时执行的一个或多个语句。
elsestatements 可选。 在前面的 conditioncondition-n 表达式均不为 True 时执行的一个或多个语句。

备注

使用单行形式 (第一个语法) 进行简短的简单测试。 但块格式(第二个语法)可提供比单行格式更多的结构和更大的灵活性,并且通常更容易读取、维护和调试。

注意

使用单行格式时,可能会由多个语句作为 If...Then 的结果执行。 所有语句都必须位于同一行上并由冒号分隔,如以下语句所示:

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

块格式的 If 语句必须是行上的第一个语句。 语句的 ElseElseIfEnd If 组成部分的前面只能有一个行号或行标签。 If 块必须以 End If 语句结尾。

若要确定语句是否为块 If,请检查 Then 关键字后面的内容。 如果同一行中出现在 Then 后面的内容不是注释,该语句将被视为单行 If 语句。

ElseElseIf 子句都是可选的。 一个 If 块中可以有任意所需数量的 ElseIf 子句,但都必须出现在 Else 子句前面。 If 块语句可以嵌套;即,相互包含。

在执行 If 块(第二个语法)时,将检验 condition。 如果 conditionTrue,将执行 Then 后面的语句。 如果 conditionFalse,将依次计算每个 ElseIf 条件(如果有)。 找到 True 条件时,将执行紧跟关联的 Then 的语句。 如果所有 ElseIf 条件均不为 True(或者不存在 ElseIf 子句),则执行 Else 后面的语句。 执行 ThenElse 后面的语句后,将继续执行 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 支持和反馈,获取有关如何接收支持和提供反馈的指南。