语法
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下的语句组。