將一個(gè)If…Then語句或If…Then…Else語句放在另外一個(gè)If…Then語句或If…Then…Else語句里面,你可以在你的VBA過程里作出更復(fù)雜的決定。這種一個(gè)If語句里包含另一個(gè)If指令塊的結(jié)構(gòu)稱為嵌套的If語句。接下來的過程TestConditions是上節(jié)里的過程WhatValue的修正版,演示嵌套的If…Then語句是如何工作的:
Sub TestConditions()
Range("A1").Select
If IsEmpty(ActiveCell) Then
MsgBox "The cell is empty."
Else
If IsNumeric(ActiveCell.Value) Then
If ActiveCell.Value = 0 Then
ActiveCell.Offset(0, 1).Value ="zero"
ElseIf ActiveCell.Value > 0 Then
ActiveCell.Offset(0, 1).Value ="positive"
ElseIf ActiveCell.Value < 0 Then
ActiveCell.Offset(0, 1).Value ="negative"
End If
Else
ActiveCell.Offset(0, 1).Value = "text"
End If
End If
End Sub
為了使過程TestConditions更容易理解,每個(gè)If…Then語句都顯示為不同的格式,現(xiàn)在你可以清楚地看到過程使用了三個(gè)If…Then程序塊。
第一個(gè)If塊(粗體)檢查當(dāng)前單元格是否為空,如果為真,就會顯示信息,然后VB將跳過Else部分找到相應(yīng)的End If,該語句位于關(guān)鍵字End Sub之前。
如果當(dāng)前單元格不為空,IsEmpty(ActiveCell)條件返回假,并且VB運(yùn)行粗體Else下面的單下劃線的If塊。該單下劃線的If…Then…Else語句就是嵌套在第一個(gè)If塊(粗體)的。該語句檢查當(dāng)前單元格是否是個(gè)數(shù)字。注意,我們通過另一個(gè)內(nèi)置函數(shù)IsNumeric來做這個(gè)。如果當(dāng)前單元格的值不是一個(gè)數(shù)字,條件就為假,因此,VB跳到單下劃線的Else處,并且在B1里輸入“text”。然而,如果當(dāng)前單元格包含個(gè)數(shù)字時(shí),VB就會運(yùn)行雙下劃線的If塊,評估每種情況并作出相應(yīng)的決定。
第一個(gè)If塊(粗體)被稱為外部If語句,這個(gè)外部語句包含兩個(gè)內(nèi)部的If語句(單下劃線和雙下劃線)。
技巧:嵌套語句
嵌套是指將一種控制結(jié)構(gòu)放在另外一控制結(jié)構(gòu)里面。你將在后面的循環(huán)結(jié)構(gòu)里看到更多的嵌套的例子。
Select Case 測試表達(dá)式
Case 表達(dá)式1
如果表達(dá)式1匹配測試表達(dá)式的語句
Case 表達(dá)式2
如果表達(dá)式2匹配測試表達(dá)式的語句
Case 表達(dá)式N
如果表達(dá)式N匹配測試表達(dá)式的語句
Case Else
如果沒有表達(dá)式匹配測試表達(dá)式要執(zhí)行的語句
End Select
你在關(guān)鍵字Select Case和End Select之間放置任意多個(gè)條件以測試。子句Case Else是可選的,當(dāng)你希望可能有條件表達(dá)式返回假時(shí)使用它。在Select Case語句里,VB將每個(gè)表達(dá)式和測試表達(dá)式相比較。Sub TestButtons()
Dim question As String
Dim bts As Integer
Dim myTitle As String
Dim myButton As Integer
question = "Do you want to open a new workbook?"
bts = vbYesNoCancel + vbQuestion + vbDefaultButton1
myTitle = "New Workbook"
myButton = MsgBox(prompt:=question, buttons:=bts, _ title:=myTitle)
Select Case myButton
Case 6
Workbooks.Add
Case 7
MsgBox "You can open a new book manually later."
Case Else
MsgBox "You pressed Cancel."
End Select
End Sub
Select Case myButton
Case vbYes
Workbooks.Add
Case vbNo
MsgBox "You can open a new book manually later."
Case Else
MsgBox "You pressed Cancel."
End Select
Select Case myButton
Case vbYes
Workbooks.Add
Case vbNo
MsgBox "You can open a new book manually later."
Case vbCancel
MsgBox "You pressed Cancel."
End Select
4. 運(yùn)行過程TestButtons三次,每次選擇一個(gè)不同的按鈕。
更多建議: