說說VBA中的Select Case語句


Select Case語句也是條件語句之一,而且是功能最強大的條件語句。它主要用於多條件判斷,而且其條件設置靈活、方便,在工作中使用頻率極高。本節介紹Select Case語句的語法及應用案例.
Select Case語句的語法如下:
Select Case testexpression
[Case expressionlist-n
[statements-n]] ...
[Case Else
[elsestatements]]
End Select
Select Case語句包括四部分,每部分詳細含義如表38-1所示。
38-1 Select Case語句各部分含義

 

 

 

testexpression
必要參數。任何數值表達式或字符串表達式
expressionlist-n
如果有 Case 出現,則為必要參數。其形式為 expressionexpression To expressionIs comparisonoperatorexpression的一個或多個組成的分界列表。To 關鍵字可用來指定一個數值范圍。如果使用 To 關鍵字,則較小的數值要出現在 To 之前。使用 Is 關鍵字時,則可以配合比較運算符(除 Is  Like 之外)來指定一個數值范圍。如果沒有提供,則 Is 關鍵字會被自動插入
statements-n
可選參數。一條或多條語句,當testexpression匹配expressionlist-n中的任何部分時執行
elsestatements
可選參數。一條或多條語句,當testexpression不匹配Case子句的任何部分時執行

在以上語法列表中,省略號代表可以使用多個條件。只要有一個Case就需要有一個statements-n,表示條件及符合條件時的執行條件。
其中elsestatements表示不符合指定條件時的執行語句,是可選參數。可以忽略elsestatements,也可以執行一條或者一組語句,為了讓程序能夠處理一些不可預見的情況,盡量使用elsestatements語句處理不符合條件時該如何回應。
Select Case的多個參數中,最復雜的是expressionlist-n部分,它有多種表達形式,包括:
l Expression——直接聲明一個條件值,例如5
l expression To expression——聲明一個條件的范圍,例如5-10
l Is comparisonoperator——聲明一種比較方式,例如is >5
下面的實例可以展示參數中expressionlist-n部分的多種表達形式。
實例1:多條件時間判斷
根據當前的時間判斷是上午、中午,還是下午、晚上、午夜。
要求中條件比較多,使IF…Then…需要多層嵌套,而Select Case語句會更簡單。代碼如下:
___________________________________________________
Sub 時間()
Dim Tim As Byte, msg As String

Tim = Hour(Now)
Select Case Tim
Case 1 To 11
msg = "上午"
Case 12
msg = "中午"
Case 13 To 16
msg = "下午"
Case 17 To 20
msg = "晚上"
Case 23, 24
msg = "午夜"
End Select
MsgBox "現在是:" & msg
End Sub
__________________________________________

以上代碼中,“Case 1 To 11表示當前時間在1點到11點,用於限定一個范圍;“Case 12”是表示當前時間為12點時返回True,可用於限制一個具體的值,或者多個值。如果需要羅列多個具體的值,那么需要在每個值之間使用逗號分隔,例如“Case 23, 24
本例中不存在例外的情況,所以忽略“Case Else”語句。
實例2:根據成績返回評語
如果成績小於60則返回“不及格”,6080之間則返回“良”,8099則返回“優”,100分則返回“滿分”,如果成績大於100則是輸入了錯誤值。利用一個Function過程來處理,其代碼如下:
________________________________________

Function 成績(rng As Range)
Select Case rng
Case Is < 0, Is > 100
成績 = "輸入錯誤"
Case Is < 60
成績 = "不及格"
Case 60
成績 = "及格"
Case 60 To 80
成績 = ""
Case 81 To 99
成績 = ""
Case Else
成績 = "滿分"
End Select
End Function
_____________________________________

以上代碼中,Is關鍵詞用於指定一種比較方式,后接IsLike以外的比較運算符。本例中需要限制小於0和大於100兩個條件,那么Is關鍵詞可以同行中使用兩次,中間用逗號分隔,表示羅列兩個條件。
Case Is < 60語句在第一個條件“Case Is < 0, Is > 100基礎上再進行比較,那么成績“-10將不符合“<60這個條件,因為 Select Case在處理多條件時,總是按從上到下的順序處理。如果改變本例的條件順序,可能產生不同的運算結果。
Case Else”語句表示如果不符合前面的所有條件,則執行它后面的語句,本例中表示成績為100時返回“滿分”。
在工作表中使用該自定義函數后,結果如圖38.1所示。
說說VBA中的Select <wbr>Case語句
38.1 利用Function返回成績評語
實例3:以指定格式顯示星期
現要求在狀態欄顯示今日星期,以三種方式供用戶選擇。具體代碼如下:
Sub 在狀態欄顯示今日是星期幾()
Dim str As String
star:
Select Case InputBox("請指定日期顯示方式: " & Chr(10) & "1:周一樣式" & Chr(10) _
& "2:星期一樣式" & Chr(10) & "3:英文", "日期顯示方式", 1)
Case 1
str = "AAA"
Case 2
str = "AAAA"
Case 3
str = "DDDD"
Case Else
MsgBox "錄入錯誤,請重新錄入"
GoTo star
End Select
Application.StatusBar = Format(Date, str)
End Sub
________________________________________

本例是“Select Case”對象不確定的實例,它在執行后由用戶手動指定對象。
Select Case語句中,利用Case限制了三個條件,分別為手動錄入123時的日期顯示格式。但用戶可能會誤輸入13范圍以外的數值,使程序產生錯誤,那么利用Case Else語句來限制,且返回到InputBox語句處讓用戶重新錄入,直到數值處於要求的范圍內為止,這是最理想的處理方式。

實例4Select Case嵌套應用計算時間

IF…Then…一樣,Select Case也可以多層嵌套。本例根據現在的時間判斷是白天還是晚上,如果是白天,再進行細分“上午”、“正午”和“下午”。詳細代碼如下:
________________________________________
Sub 時間2()
tim = Hour(Now) '獲取現在的時間
Select Case tim '條件語句開始,第一層
Case 8 To 18
'如果是白天

Select Case tim '嵌套使用,第二層
Case Is < 12 '如果小於12
MsgBox "上午"
Case 12
'
如果等於12

MsgBox "正午"
Case Else
'
其他情況,表示1318之間

MsgBox "下午"
End Select
'
結束層條件語句

Case Else
'
其他情況,外層

MsgBox "晚上"
'
表示18之間或1924之間

End Select
End Sub
_____________________________________

Select Case語句第一個條件中嵌套了一個Select Case條件語句。根據需要,還可以嵌套多層條件語句。
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM