Skip to content

If...Then...Else

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

语法:

  • If condition Then [ statements ] [ Else elsestatements ]

  • If condition Then
        [ statements ]
    [ ElseIf condition-n Then
        [ elseifstatements ] ]
    [ Else
        [ elsestatements ] ]
    End If

condition
以下两种类型的表达式之一或多个:
  • 求值为 TrueFalse 的数值表达式或字符串表达式。如果 condition 为Null,则 condition 被视为 False
  • TypeOf objectname Is objecttype 形式的表达式。objectname 是任何对象引用,objecttype 是任何有效的对象类型。如果 objectnameobjecttype 指定的对象类型,则表达式为 True;否则为 False
statements
块形式中可选;没有 Else 子句的单行形式中必需。用冒号分隔的一条或多条语句;当 conditionTrue 时执行。
condition-n
可选condition 相同。
elseifstatements
可选 当关联的 condition-nTrue 时执行的一条或多条语句。
elsestatements
可选 当前面没有 conditioncondition-n 表达式为 True 时执行的一条或多条语句。

对于简短的测试使用单行形式(第一种语法)。块形式(第二种语法)比单行形式提供更多结构和灵活性,通常更容易阅读、维护和调试。

INFO

使用单行形式时,可以作为 If...Then 判断的结果执行多条语句。所有语句必须在同一行并用冒号分隔,如下语句:

vb
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 之后的语句。

TIP

当评估具有多种可能操作的单个表达式时,Select Case 可能更有用。但 TypeOf objectname Is objecttype 子句不能与 Select Case 语句一起使用。

INFO

TypeOf 不能与 LongInteger 等除 Object 之外的硬数据类型一起使用。

示例

本示例展示 If...Then...Else 语句的块形式和单行形式。还展示了 If TypeOf...Then...Else 的用法。

vb
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 构造确定传入过程的控件是否是特定类型的控件。

vb
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

另请参阅

twinBASIC及其LOGO版权为作者"韦恩"所有