Select Case
根据表达式的值执行若干语句组之一。
语法:
Select Case testexpression
[ Case expressionlist-n
[ statements-n ] ] ...
[ Case Else
[ elsestatements ] ]
End Select
- testexpression
任意数值表达式或字符串表达式。
- expressionlist-n
如果出现Case则为必需。以分隔符分隔的一个或多个以下形式的列表:
- expression
- expression To expression
- Is comparisonoperator expression
To关键字指定值的范围。使用To关键字时,较小的值必须出现在To之前。
使用Is关键字与比较运算符(Is和Like除外)来指定值的范围。如果未提供,Is关键字会自动插入。
- statements-n
可选 如果testexpression匹配expressionlist-n的任何部分,则执行的一个或多个语句。
- elsestatements
可选 如果testexpression不匹配任何Case子句,则执行的一个或多个语句。
如果testexpression匹配任何Case expressionlist表达式,则执行该Case子句之后的statements,直到下一个Case子句,或对于最后一个子句直到End Select。然后控制传递到End Select之后的语句。如果testexpression匹配多个Case子句中的expressionlist表达式,则只执行第一个匹配之后的语句。
Case Else子句用于指示在testexpression与任何其他Case选择中的expressionlist没有匹配时要执行的elsestatements。虽然不是必需的,但在Select Case块中使用Case Else语句处理未预见的testexpression值是一个好习惯。如果没有Case expressionlist匹配testexpression且没有Case Else语句,执行继续到End Select之后的语句。
每个Case子句中可以出现多个表达式或范围。例如,以下行是有效的:
Case 1 To 4, 7 To 9, 11, 13, Is > MaxNumberINFO
Is比较运算符与Select Case语句中使用的Is关键字不同。
字符串也可以指定范围和多个表达式。在下面的示例中,Case匹配与everything完全相等的字符串、按字母顺序在nuts和soup之间的字符串以及TestItem的当前值:
Case "everything", "nuts" To "soup", TestItemSelect Case语句可以嵌套。每个嵌套的Select Case语句必须有匹配的End Select语句。
示例
本示例使用Select Case语句评估变量的值。第二个Case子句包含被评估变量的值,因此只执行与之关联的语句。
Dim Number
Number = 8 ' Initialize variable.
Select Case Number ' Evaluate Number.
Case 1 To 5 ' Number between 1 and 5, inclusive.
Debug.Print "Between 1 and 5"
' The following is the only Case clause that evaluates to True.
Case 6, 7, 8 ' Number between 6 and 8.
Debug.Print "Between 6 and 8"
Case 9 To 10 ' Number is 9 or 10.
Debug.Print "Greater than 8"
Case Else ' Other values.
Debug.Print "Not between 1 and 10"
End Select