為了避免難以弄清的復(fù)雜的嵌套的If語句,,你可以使用Select Case語句代替,。它的語法為: 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之間放置任意多個條件以測試。子句Case Else是可選的,,當(dāng)你希望可能有條件表達(dá)式返回假時使用它,。在Select Case語句里,VB將每個表達(dá)式和測試表達(dá)式相比較,。 這里是Select Case語句背后的邏輯,。當(dāng)VB遇到Select Case子句,它記下測試表達(dá)式的值,。然后它前進(jìn)到下面的第一個Case子句,,如果這個表達(dá)式的值和測試表達(dá)式的值匹配的話,,VB就會執(zhí)行語句直到遇到另外一個Case子句并且跳到End Select語句。然而,,如果第一個Case子句后面的表達(dá)式測試結(jié)果和測試表達(dá)式不匹配時,,VB就會檢查每一個Case子句,直到它找到一個匹配的為止,。如果沒有一個Case子句后面的表達(dá)式匹配測試表達(dá)式的值的話,,VB就會跳到Case Else子句并執(zhí)行該語句直到遇到關(guān)鍵字End Select。注意,,Case Else子句是可選的,,如果你的程序里面沒有使用Case Else并且沒有一個Case子句的表達(dá)式和測試表達(dá)式相匹配,VB就會跳到End Select后面的語句,,并且繼續(xù)執(zhí)行你的程序,。 我們來一個使用Select Case語句的程序例子。在第四章里,,你學(xué)習(xí)了MsgBox函數(shù)允許你顯示帶有一個或多個按鈕的信息,,你也學(xué)習(xí)了MsgBox函數(shù)的結(jié)果可以賦予一個變量。使用Select Case語句,,你現(xiàn)在可以基于用戶按下的按鈕決定采取哪個行動,。 1. 在當(dāng)前工程里插入一新模塊 2. 重命名新模塊SelectCase. 3. 輸入下述過程TestButtons: 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 過程TestButtons的第一部分顯示一個帶有三個按鈕的信息框:是,,否和取消,。用戶選擇按鈕的值賦予變量myButton。 如果用戶點(diǎn)擊“是”,,那么變量myButton就會被賦值常量vbYes或它對應(yīng)的值6,;如果用戶點(diǎn)擊“否”,那么變量myButton則賦值為常量vbNo或它對應(yīng)的值7,;最后,,如果點(diǎn)擊了“取消”,變量myButton的內(nèi)容就等于vbCancel或2,。 Select Case語句對照儲存在變量myButton里的值檢查Case子句提供的值,。當(dāng)有匹配時,就會執(zhí)行適當(dāng)?shù)?span lang="EN-US">Case語句,。 如果你使用常量,,而不是按鈕值,過程TestButtons同樣會運(yùn)行一致,。 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 你可以忽略Else子句,,可以按下述方法修改一下Select Case語句: 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三次,每次選擇一個不同的按鈕,。 技巧5-6 通過Case Else捕捉錯誤 盡管在Select Case語句里使用Case Else不是強(qiáng)制的,,使用它總是很好的,,以防止萬一測試有沒有預(yù)料到的值。Case Else子句是個放置錯誤信息的好地方,。 有時候,,作決定是基于測試表達(dá)式的條件,例如它是否大于,,小于,,等于或使用一些其它的關(guān)系運(yùn)算符(參見表5-1)。關(guān)鍵字Is使你能夠在Case子句里使用條件表達(dá)式,。使用關(guān)鍵字Is的Select Case語句的語法如下: Select Case 測試表達(dá)式 Case Is 條件1 如果條件1為真時執(zhí)行的語句 Case Is 條件2 如果條件2為真時執(zhí)行的語句 Case Is 條件N 如果條件N為真時執(zhí)行的語句 End Select 例如,,我們來比較幾個數(shù)字: Select Case myNumber Case Is <10 MsgBox "The number is less than 10" Case 11 MsgBox "You entered eleven." Case Is >=100 MsgBox "The number is greater than or equal to 100." Case Else MsgBox "The number is between 12 and 99." End Select 假設(shè)變量myNumber為120,那么第三個Case子句為真,,并且只有Case Is >=100和Case Else之間的語句會被執(zhí)行,。 9.確定Case子句里數(shù)值的范圍在前面的例子里,你看到了在每個Case子句里使用一個簡單表達(dá)式,。然而,,很多時候,你可能需要在Case子句里確定一個數(shù)值范圍,??梢酝ㄟ^關(guān)鍵字To用于表達(dá)式的數(shù)值之間來實現(xiàn)它,如下所示: Select Case unitsSold Case 1 to 100 Discount = 0.05 Case Is <= 500 Discount = 0.1 Case 501 to 1000 Discount = 0.15 Case Is >1000 Discount = 0.2 End Select 我們來分析一下上面的Select Case代碼塊,,假設(shè)變量unitsSold當(dāng)前值為99,。VB將變量unitsSold的值與Case子句的條件表達(dá)式進(jìn)行比較。第一和第三條Case子句示范如何通過使用關(guān)鍵字To在條件表達(dá)式里使用數(shù)值范圍,。因為unitsSold=99,,第一個Case子句里的條件表達(dá)式為真,因此,,VB將0.05賦給變量Discount,。第二個Case子句如何呢?它也為真,。盡管,,很明顯99小于等于500,VB不會執(zhí)行相關(guān)的語句Discount=0.1,。原因是,,一旦VB找到了一個真條件的Case子句,它就不會去管其它的Case子句,,它將跳過那些代碼,,繼續(xù)執(zhí)行End Select語句后面可能有的語句。 我們來練練使用Select Case語句,,在函數(shù)過程里使用它,?;叵朐诘谒恼吕铮瘮?shù)過程允許你將結(jié)果返回給一個子過程,。假設(shè)該子過程必須根據(jù)銷售的套數(shù)來顯示一個折扣,,你可以從用戶那里獲得銷售套數(shù),然后允許一個函數(shù)來確定需要的折扣: 1. 在模塊SelectCase里輸入下列子過程: Sub DisplayDiscount() Dim unitsSold As Integer Dim myDiscount As Single unitsSold = InputBox("Enter the number of sold units:") myDiscount = GetDiscount(unitsSold) MsgBox myDiscount End Sub 2. 輸入下列函數(shù)過程: Function GetDiscount(unitsSold As Integer) Select Case unitsSold Case 1 To 200 GetDiscount = 0.05 Case Is <=500 GetDiscount = 0.1 Case 501 To 1000 GetDiscount = 0.15 Case Is >1000 GetDiscount = 0.2 End Select End Function 3. 將光標(biāo)放在過程DisplayDiscount的任意地方并且按下F5來運(yùn)行它,。 過程DisplayDiscount將儲存于變量unitsSold的值傳遞給函數(shù)GetDiscount,。當(dāng)VB遇到Select Case語句時,它檢查第一個Case子句里的值是否合儲存于unitsSold里面的值是否匹配,。如果匹配,,VB給函數(shù)名稱賦值百分之五(0.05),并且跳到關(guān)鍵字End Select,。因為,,在函數(shù)過程里面沒有更多需要運(yùn)行的語句,VB就返回主調(diào)過程——DisplayDiscount,,在這里,,它將函數(shù)的結(jié)果賦予變量myDiscount。最后的語句用信息框來顯示獲得的折扣,。 10.在Case子句里確定多個表達(dá)式你可以使用逗號明確單一Case子句里的多個表達(dá)式: Select Case myMonth Case "January", "February", "March" Debug.Print myMonth & ": 1st Qtr." Case "April", "May", "June" Debug.Print myMonth & ": 2nd Qtr." Case "July", "August", "September" Debug.Print myMonth & ": 3rd Qtr." Case "October", "November", "December" Debug.Print myMonth & ": 4th Qtr." End Select 技巧5-7 Case子句的多個條件 |
|