If...Then...Else 陳述式

根據運算式的值,有條件的執行陳述式群組。

語法

IfconditionThen [ statements ] [ Elseelsestatements ]

或者,您可以使用區塊形式語法︰

IfconditionThen
[ statements ]
[ ElseIfcondition-nThen
[ elseifstatements ]]
[ Else
[ elsestatements ]]
End If

If...Then...Else 陳述式的語法具有以下幾個部分。

部分 描述
condition 必要。 下列兩種類型的運算式之中的一或多個︰

數值運算式或字串運算式,會評估為 TrueFalse。 如果 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 之後的陳述式。

提示

在評估具有多個可能值的單一運算式時,Select 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 支援與意見反應