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 是任何有效的对象类型。 如果 objectname 为 objecttype 指定的对象类型,则表达式为 True;否则为 False。 |
statements | 在块格式中为可选;在没有 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 关键字 (keyword) 后面的内容。 如果同一行中出现在 Then 后面的内容不是注释,该语句将被视为单行 If 语句。
Else 和 ElseIf 子句都是可选的。 一个 If 块中可以有任意所需数量的 ElseIf 子句,但都必须出现在 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 支持和反馈,获取有关如何接收支持和提供反馈的指南。