語法
Select Case <指示變數或表示式>
<預設語句組,以上語句組都因情形不符合實際時執行>
End Select
其中,表述情形的關鍵字,有IS和TO,多個情形要並列在一起時,使用逗號(英文)連線。當省略Case Else語句並且語句組都因情形不符合實際時,語句的執行,會直接到達End Select。如果在執行語句的時候,有需要跳過沒有必要再執行的語句而直接結束Select Case的情況時,請使用exit select。
注意
在“<指示變數或表示式>”不是True或False關鍵字時,邏輯運算(And、Or、Not)會沒有意義。因為邏輯運算的結果是True或False,不是表述具體情況的值或者範圍。需要比較大小時,請使用IS、To關鍵字。以上為了給出一個能夠通用的語法而如此表述。
在“<指示變數或表示式>”是True或False關鍵字時,Is、To關鍵字沒有意義。
以上兩種情況,切記不要搞混。
巢狀
各語句組中也可以寫入完整的Select Case語句,像For迴圈中巢狀一個二級迴圈一樣。別誤會,Select Case不是迴圈語句,是條件選擇語句,與
IF...ELSEIF...ELSEIF...END
基本用法
Private Sub main()
Select Case InputBox("請輸入你希望的天氣,從晴天、多雲、陰天、陣雨、小雨、小雪、冰雹中選一個填入。", "請輸入你希望的天氣", "晴天")
Case "晴天"
MsgBox "哇哦!你喜歡的是晴天啊,祝你天天好心“晴”~!"
Case "多雲"
MsgBox "喜歡多雲的天氣,是因為比較怕紫外線嗎?"
Case "陰天"
MsgBox "為什麼喜歡陰天呢?真令人好奇啊~!"
Case "陣雨"
MsgBox "為什麼喜歡陣雨天呢?真令人好奇啊~!"
Case "小雨"
MsgBox "為什麼喜歡小雨天呢?真令人好奇啊~!"
Case "小雪"
MsgBox "為什麼喜歡小雪天呢?真令人好奇啊~!"
Case "冰雹"
MsgBox "為什麼喜歡冰雹天呢?真令人好奇啊~!"
Case Else
MsgBox "不可以醬紫!只能從我給出的幾種中挑選一個填入!"
End Sub
使用關鍵字IS
Select Case Day(Now)
Case Is <= 10
MsgBox "目前是本月上旬!"
Case Is > 20
MsgBox "目前是本月下旬!"
MsgBox "目前是本月中旬!"
<以上程式碼在VB6.0測試透過>
使用關鍵字TO
Select Case Weekday(Now)
Case 1, 7
MsgBox "今天是週末!"
Case 2 To 6
MsgBox "今天不是週末!"
關鍵字IS和TO可以根據需要,在同一條情形中一起使用,例如
Case Is<=5,8 to 10,Is>20
不過要注意的是,TO表示的區間,是閉區間,不適用於開區間(或半閉半開區間)。如果一定要用select Case來確定數值在哪個區間內,可以這麼做:
On Error GoTo err
Dim num As Single
num = InputBox("請輸入!")
Select Case num
Case Is <= 1
MsgBox "這個數不大於1"
Case Is < 3
MsgBox "這個數在1和3之間的開區間內"
Case Is < 5
MsgBox "這個數在3和5之間的半閉半開區間內"
Case Is <= 7
MsgBox "這個數在5和7之間的閉區間內"
Case Is > 7
MsgBox "這個數大於7"
Exit Sub
err:
MsgBox "這個不是可比較的數字"
此時,各Case不能隨便對換順序。雖然這個可以達到我們想要的效果,卻因為不夠嚴謹,讓我憂心忡忡。那麼什麼是最嚴謹的呢?請看高階用法。
高階用法
語法(這裡只是為了更好的理解,稍稍變一下表述,不改變實意。)
Select Case true
Case <邏輯運算表示式1>
<語句組1>
Case <邏輯運算表示式2>
<語句組2>
....
Case <邏輯運算表示式n>
<語句組n>
<預設語句組,當以上任何邏輯運算都為False時執行>
在此語法下,Is、To關鍵字沒有意義,Is的值為true(Is是變數嗎?這個問題真的好讓人回味啊)
只要邏輯運算表示式的運算結果為true,就執行該Case下的語句組。那麼,上面的例子就這麼改。
Select Case True
Case num >= 5 And num <= 7
Case num < 3 And num > 1
Case num > 7
Case num < 5 And num >= 3
可以看到,順序被我隨意變動了,測試也通過了。那麼,愛琢磨的我,又發現一個問題:Select Case True可以改成Select Case False嗎?答案是,可以。這裡就不作示例了,只給出語法
Select Case False
<預設語句組,當以上任何邏輯運算都為true時執行>
只要邏輯運算表示式的運算結果為False,就執行該Case下的語句組。
語法
Select Case <指示變數或表示式>
<預設語句組,以上語句組都因情形不符合實際時執行>
End Select
其中,表述情形的關鍵字,有IS和TO,多個情形要並列在一起時,使用逗號(英文)連線。當省略Case Else語句並且語句組都因情形不符合實際時,語句的執行,會直接到達End Select。如果在執行語句的時候,有需要跳過沒有必要再執行的語句而直接結束Select Case的情況時,請使用exit select。
注意
在“<指示變數或表示式>”不是True或False關鍵字時,邏輯運算(And、Or、Not)會沒有意義。因為邏輯運算的結果是True或False,不是表述具體情況的值或者範圍。需要比較大小時,請使用IS、To關鍵字。以上為了給出一個能夠通用的語法而如此表述。
在“<指示變數或表示式>”是True或False關鍵字時,Is、To關鍵字沒有意義。
以上兩種情況,切記不要搞混。
巢狀
各語句組中也可以寫入完整的Select Case語句,像For迴圈中巢狀一個二級迴圈一樣。別誤會,Select Case不是迴圈語句,是條件選擇語句,與
IF...ELSEIF...ELSEIF...END
IF類似。基本用法
Private Sub main()
Select Case InputBox("請輸入你希望的天氣,從晴天、多雲、陰天、陣雨、小雨、小雪、冰雹中選一個填入。", "請輸入你希望的天氣", "晴天")
Case "晴天"
MsgBox "哇哦!你喜歡的是晴天啊,祝你天天好心“晴”~!"
Case "多雲"
MsgBox "喜歡多雲的天氣,是因為比較怕紫外線嗎?"
Case "陰天"
MsgBox "為什麼喜歡陰天呢?真令人好奇啊~!"
Case "陣雨"
MsgBox "為什麼喜歡陣雨天呢?真令人好奇啊~!"
Case "小雨"
MsgBox "為什麼喜歡小雨天呢?真令人好奇啊~!"
Case "小雪"
MsgBox "為什麼喜歡小雪天呢?真令人好奇啊~!"
Case "冰雹"
MsgBox "為什麼喜歡冰雹天呢?真令人好奇啊~!"
Case Else
MsgBox "不可以醬紫!只能從我給出的幾種中挑選一個填入!"
End Select
End Sub
使用關鍵字IS
Private Sub main()
Select Case Day(Now)
Case Is <= 10
MsgBox "目前是本月上旬!"
Case Is > 20
MsgBox "目前是本月下旬!"
Case Else
MsgBox "目前是本月中旬!"
End Select
End Sub
<以上程式碼在VB6.0測試透過>
使用關鍵字TO
Private Sub main()
Select Case Weekday(Now)
Case 1, 7
MsgBox "今天是週末!"
Case 2 To 6
MsgBox "今天不是週末!"
End Select
End Sub
<以上程式碼在VB6.0測試透過>
關鍵字IS和TO可以根據需要,在同一條情形中一起使用,例如
Case Is<=5,8 to 10,Is>20
不過要注意的是,TO表示的區間,是閉區間,不適用於開區間(或半閉半開區間)。如果一定要用select Case來確定數值在哪個區間內,可以這麼做:
Private Sub main()
On Error GoTo err
Dim num As Single
num = InputBox("請輸入!")
Select Case num
Case Is <= 1
MsgBox "這個數不大於1"
Case Is < 3
MsgBox "這個數在1和3之間的開區間內"
Case Is < 5
MsgBox "這個數在3和5之間的半閉半開區間內"
Case Is <= 7
MsgBox "這個數在5和7之間的閉區間內"
Case Is > 7
MsgBox "這個數大於7"
End Select
Exit Sub
err:
MsgBox "這個不是可比較的數字"
End Sub
此時,各Case不能隨便對換順序。雖然這個可以達到我們想要的效果,卻因為不夠嚴謹,讓我憂心忡忡。那麼什麼是最嚴謹的呢?請看高階用法。
高階用法
語法(這裡只是為了更好的理解,稍稍變一下表述,不改變實意。)
Select Case true
Case <邏輯運算表示式1>
<語句組1>
Case <邏輯運算表示式2>
<語句組2>
....
Case <邏輯運算表示式n>
<語句組n>
Case Else
<預設語句組,當以上任何邏輯運算都為False時執行>
End Select
在此語法下,Is、To關鍵字沒有意義,Is的值為true(Is是變數嗎?這個問題真的好讓人回味啊)
只要邏輯運算表示式的運算結果為true,就執行該Case下的語句組。那麼,上面的例子就這麼改。
Private Sub main()
On Error GoTo err
Dim num As Single
num = InputBox("請輸入!")
Select Case True
Case num >= 5 And num <= 7
MsgBox "這個數在5和7之間的閉區間內"
Case num < 3 And num > 1
MsgBox "這個數在1和3之間的開區間內"
Case num > 7
MsgBox "這個數大於7"
Case num < 5 And num >= 3
MsgBox "這個數在3和5之間的半閉半開區間內"
End Select
Exit Sub
err:
MsgBox "這個不是可比較的數字"
End Sub
可以看到,順序被我隨意變動了,測試也通過了。那麼,愛琢磨的我,又發現一個問題:Select Case True可以改成Select Case False嗎?答案是,可以。這裡就不作示例了,只給出語法
Select Case False
Case <邏輯運算表示式1>
<語句組1>
Case <邏輯運算表示式2>
<語句組2>
....
Case <邏輯運算表示式n>
<語句組n>
Case Else
<預設語句組,當以上任何邏輯運算都為true時執行>
End Select
只要邏輯運算表示式的運算結果為False,就執行該Case下的語句組。