当前位置:编程学习 > VB >>

select case如何表达复合条件?

例如:

select case A
       CASE ?  'a>1 and a<=2
       case ?  'a>2 and a<=3
       case ?  'a>3 and a<=4
end select    --------------------编程问答-------------------- 权威来自:MSDN

Microsoft(R) Visual Basic(R) Scripting Edition
Select Case 语句  语言参考 
起始页|版本 1 
 

请参阅 


--------------------------------------------------------------------------------

描述
根据表达式的值执行几组语句之一。 
语法
Select Case testexpression
[Case expressionlist-n
[statements-n]] . . .
[Case Else expressionlist-n
[elsestatements-n]]
End Select
Select Case 语句的语法包含以下部分:

部分 描述 
testexpression 任意数值或字符串表达式。 
expressionlist-n 如 Case 出现则必选。一个或多个表达式的分界列表。 
statements-n 当 testexpression 与 expressionlist-n 中的任意部分匹配时,执行的一条或多条语句。 
elsestatements-n 当 testexpression 与 Case 子句的任何部分不匹配时,执行的一条或多条语句。 


说明
如果 testexpression 与任何 Case expressionlist 表达式匹配,则执行此 Case 子句和下一个 Case 子句之间的语句,对于最后的子句,则会执行该子句到 End Select 之间的语句,然后控制权会转到 End Select 之后的语句。如 testexpression 与多个 Case 子句中的 expressionlist 表达式匹配,则只有第一个匹配后的语句被执行。
Case Else 用于指示若在 testexpression 和任何其他 Case 选项的 expressionlist 之间未找到匹配,则执行 elsestatements。虽然不是必要的,但最好是将 Case Else 语句置于 Select Case 块中以处理不可预见的 testexpression 值。如果没有 Case expressionlist 与 testexpression 匹配且无 Case Else 语句,则继续执行 End Select 之后的语句。

Select Case 语句可以是嵌套的,每一层嵌套的 Select Case 语句必须有与之匹配的 End Select 语句。

下面例子举例说明如何使用 Select Case 语句: 

Dim Color, MyVar
Sub ChangeBackground (Color)
MyVar = lcase (Color)
    Select Case MyVar
           Case "red"    document.bgColor = "red"
           Case "green"  document.bgColor = "green"
           Case "blue"   document.bgColor = "blue"
           Case Else     MsgBox "选择另一种颜色"
      End Select
End Sub


--------------------------------------------------------------------------------
(C) 1998 Microsoft Corporation. All rights reserved. Terms of Us --------------------编程问答-------------------- 多倏件的只能用:if ..then ... elseif .. then .... ..... else .. end if吧 --------------------编程问答-------------------- select case a
case 1 to 10

case 11 to 20

case else

end select --------------------编程问答-------------------- Select Case 语句支持多条件或,也就是多条件列举,但不支持多条件与。这种情况需要从逻辑上解决:

Dim A As Integer

A = 3.5

Select Case A
    Case Is <= 1
        Debug.Print "out of the range"
    Case Is <= 2
        Debug.Print "between 1 and 2"
    Case Is <= 3
        Debug.Print "between 2 and 3"
    Case Is <= 4
        Debug.Print "between 3 and 4"
    Case Else
        Debug.Print "out of the range"
End Select

注意,所有的 Case 都是互斥的关系。这与 C 是不同的。 --------------------编程问答-------------------- 经常用这个方法。
select case a
case 1 to 10

case 11 to 20

case else

end select

个人认为,这个方法表述含糊,不明确。
Case Is <= 1
  Debug.Print "out of the range"
  Case Is <= 2
  Debug.Print "between 1 and 2"
  Case Is <= 3
--------------------编程问答-------------------- 楼上说的方法只限于离散数。

比如 10.5 在你的代码里怎么处理,也许你可以改成 1 To 10.5, 10.6 To ……。那 10.55 呢?

如果你有足够的逻辑思维,就不会觉得连续数字 Case 处理含糊了。含糊的是你的认知能力。


--------------------编程问答-------------------- 这个, 没看出什么"复合条件"来? select case 本来就是用于这种多段选择的最好方法.
并且还可以嵌套使用:

select case A
   case is < 10:
        SELECT CASE A
               CASE 1,4,5: ****
               CASE 2,3,6,9:****
               CASE 0,7,8:****
        END SELECT
   case is < 20: ****
   case is < 30: ****
...
end select

而且一般情况下, 只要有可能出现超过2个以上条件的判断, 我都会使用select case而不是if then else之类的语句. 可读性和层次都不如select case那么清晰.
--------------------编程问答-------------------- select case A
  CASE ? 'a>1 and a<=2
  case ? 'a>2 and a<=3
  case ? 'a>3 and a<=4
end select 

=======>
select case A
  CASE is <=2
  case 2 to 3
  case 3 to 4
end select  --------------------编程问答-------------------- 如下试试,或许是你要的:
select case true
  CASE a>1 and a<=2
    debug.? "a>1 and a<=2"
  case a>2 and a<=3
    debug.? "a>2 and a<=3"
  case a>3 and a<=4
    debug.? "a>3 and a<=4"
  case else
    debug.? "out of the range"
end select  

--------------------编程问答-------------------- 条件较复杂
 不如建议楼主用
IF ...THEN 
ELSE IF

ELSE 
DND IF 这种方式 条理清楚 不容易出错 --------------------编程问答-------------------- 9楼的回答很棒 --------------------编程问答--------------------
引用 4 楼  的回复:
Select Case 语句支持多条件或,也就是多条件列举,但不支持多条件与。这种情况需要从逻辑上解决:

Dim A As Integer

A = 3.5

Select Case A
  Case Is <= 1
  Debug.Print "out of the range"
  Case Is <= 2
  Debug.Print "between 1 and 2"
……

同意,这个有新意!
--------------------编程问答--------------------
引用 9 楼  的回复:
如下试试,或许是你要的:
select case true
  CASE a>1 and a<=2
  debug.? "a>1 and a<=2"
  case a>2 and a<=3
  debug.? "a>2 and a<=3"
  case a>3 and a<=4
  debug.? "a>3 and a<=4"
  case else
  debug.? "out……

这个是传统做法!
补充:VB ,  基础类
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,