codecamp

和Case子句一起使用Is的方法

有时候,作决定是基于测试表达式的条件,例如它是否大于,小于,等于或使用一些其它的关系运算符(参见表5-1)。关键字Is使你能够在Case子句里使用条件表达式。使用关键字Is的SelectCase语句的语法如下:




表5-1 VBA中的关系运算符

Select Case 测试表达式

Case Is 条件1


    如果条件1为真时执行的语句


Case Is 条件2


    

如果条件2为真时执行的语句


Case Is 条件N


    

如果条件N为真时执行的语句


End Select



例如,我们来比较几个数字:

Select Case myNumber
     Case Is <10
              MsgBox "The number is less than 10"
     Case 11
              MsgBox "You entered eleven."
     Case Is >=100
              MsgBox "The number is greater than or equal to 100."
     Case Else
              MsgBox "The number is between 12 and 99."
End Select

假设变量myNumber为120,那么第三个Case子句为真,并且只有Case Is >=100和Case Else之间的语句会被执行。

确定Case子句里数值的范围

在前面的例子里,你看到了在每个Case子句里使用一个简单表达式。然而,很多时候,你可能需要在Case子句里确定一个数值范围。可以通过关键字To用于表达式的数值之间来实现它,如下所示:
Select Case unitsSold
     Case 1 to 100
              Discount = 0.05
     Case Is <= 500
              Discount = 0.1
     Case 501 to 1000
              Discount = 0.15
     Case Is >1000
              Discount = 0.2
End Select
我们来分析一下上面的Select Case代码块,假设变量unitsSold当前值为99。VB将变量unitsSold的值与Case子句的条件表达式进行比较。第一和第三条Case子句示范如何通过使用关键字To在条件表达式里使用数值范围。因为unitsSold=99,第一个Case子句里的条件表达式为真,因此,VB将0.05赋给变量Discount。第二个Case子句如何呢?它也为真。尽管,很明显99小于等于500,VB不会执行相关的语句Discount=0.1。原因是,一旦VB找到了一个真条件的Case子句,它就不会去管其它的Case子句,它将跳过那些代码,继续执行End Select语句后面可能有的语句。

我们来练练使用Select Case语句,在函数过程里使用它。回想在前面的章节里,函数过程允许你将结果返回给一个子过程。假设该子过程必须根据销售的套数来显示一个折扣,你可以从用户那里获得销售套数,然后允许一个函数来确定需要的折扣:

1.  在模块SelectCase里输入下列子过程:
Sub DisplayDiscount()
    Dim unitsSold As Integer
    Dim myDiscount As Single
    unitsSold = InputBox("Enter the number of sold units:")
    myDiscount = GetDiscount(unitsSold)
    MsgBox myDiscount
End Sub

2.  输入下列函数过程:
Function GetDiscount(unitsSold As Integer)
    Select Case unitsSold
        Case 1 To 200
             GetDiscount = 0.05
        Case Is <=500
             GetDiscount = 0.1
        Case 501 To 1000
             GetDiscount = 0.15
        Case Is >1000
             GetDiscount = 0.2
    End Select
End Function
3.  将光标放在过程DisplayDiscount的任意地方并且按下F5来运行它。过程DisplayDiscount将储存于变量unitsSold的值传递给函数GetDiscount。当VB遇到SelectCase语句时,它检查第一个Case子句里的值是否合储存于unitsSold里面的值是否匹配。如果匹配,VB给函数名称赋值百分之五(0.05),并且跳到关键字EndSelect。因为,在函数过程里面没有更多需要运行的语句,VB就返回主调过程——DisplayDiscount,在这里,它将函数的结果赋予变量myDiscount。最后的语句用信息框来显示获得的折扣。

在Case子句里确定多个表达式

你可以使用逗号明确单一Case子句里的多个表达式:
Select Case myMonth
     Case "January", "February", "March"
               Debug.Print myMonth & ": 1st Qtr."
     Case "April", "May", "June"
               Debug.Print myMonth & ": 2nd Qtr."
     Case "July", "August", "September"
               Debug.Print myMonth & ": 3rd Qtr."
     Case "October", "November", "December"
               Debug.Print myMonth & ": 4th Qtr."
End Select
技巧:Case子句的多个条件
用来分隔开Case子句里面多个条件的逗号,和用于If语句里的运算符OR意义一样。只要这些条件有一个为真,Case子句就为真。

在本章介绍的条件语句,让你控制你的过程走向。通过测试条件的真假,你可以决定哪些语句需要执行,哪些要跳过。换句话说,不必从上到下,一行一行地运行你的过程,你可以只执行某些行,如果你犹豫应该使用哪种条件语句,这里是一些指南:

①如果你只要提供一个条件,简单的If…Then语句是最好的选择

②如果你要决定运行两个条件中的一个,那么使用If…Then…Else语句
„  
③如果你的程序需要两个或多个条件,那么使用If…Then…ElseIf或者Select Case语句
„  
④如果你的程序有很多条件,那么就使用Select  Case语句。这个语句比If…Then…ElseIf语句更灵活并且更容易理解。

有些决定是需要重复的,例如,你可能需要在工作表里的每个单元格里或者一个工作簿里的每个表里重复同样的操作。


VBA中嵌套的If…Then语句和Select Case语句
VB的Do…While循环语句
温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }