分享

Select Case语句教程

 zele 2011-02-25

为了避免难以弄清的复杂的嵌套的If语句,你可以使用Select Case语句代替。它的语法为:

Select Case 测试表达式

Case 表达式1

如果表达式1匹配测试表达式的语句

Case 表达式2

如果表达式2匹配测试表达式的语句

Case 表达式N

如果表达式N匹配测试表达式的语句

Case Else

如果没有表达式匹配测试表达式要执行的语句

End Select

你在关键字Select CaseEnd Select之间放置任意多个条件以测试。子句Case Else是可选的,当你希望可能有条件表达式返回假时使用它。在Select Case语句里,VB将每个表达式和测试表达式相比较。

这里是Select Case语句背后的逻辑。当VB遇到Select Case子句,它记下测试表达式的值。然后它前进到下面的第一个Case子句,如果这个表达式的值和测试表达式的值匹配的话,VB就会执行语句直到遇到另外一个Case子句并且跳到End Select语句。然而,如果第一个Case子句后面的表达式测试结果和测试表达式不匹配时,VB就会检查每一个Case子句,直到它找到一个匹配的为止。如果没有一个Case子句后面的表达式匹配测试表达式的值的话,VB就会跳到Case Else子句并执行该语句直到遇到关键字End Select。注意,Case Else子句是可选的,如果你的程序里面没有使用Case Else并且没有一个Case子句的表达式和测试表达式相匹配,VB就会跳到End Select后面的语句,并且继续执行你的程序。

我们来一个使用Select Case语句的程序例子。在第四章里,你学习了MsgBox函数允许你显示带有一个或多个按钮的信息,你也学习了MsgBox函数的结果可以赋予一个变量。使用Select Case语句,你现在可以基于用户按下的按钮决定采取哪个行动。

1.       在当前工程里插入一新模块

2.       重命名新模块SelectCase.

3.       输入下述过程TestButtons:

Sub TestButtons()

Dim question As String

Dim bts As Integer

Dim myTitle As String

Dim myButton As Integer

 

question = "Do you want to open a new workbook?"

bts = vbYesNoCancel + vbQuestion + vbDefaultButton1

myTitle = "New Workbook"

 

myButton = MsgBox(prompt:=question, buttons:=bts, _ title:=myTitle)

 

Select Case myButton

Case 6

Workbooks.Add

Case 7

MsgBox "You can open a new book manually later."

Case Else

MsgBox "You pressed Cancel."

End Select

 

End Sub

过程TestButtons的第一部分显示一个带有三个按钮的信息框:是,否和取消。用户选择按钮的值赋予变量myButton

如果用户点击“是”,那么变量myButton就会被赋值常量vbYes或它对应的值6;如果用户点击“否”,那么变量myButton则赋值为常量vbNo或它对应的值7;最后,如果点击了“取消”,变量myButton的内容就等于vbCancel2

Select Case语句对照储存在变量myButton里的值检查Case子句提供的值。当有匹配时,就会执行适当的Case语句。

如果你使用常量,而不是按钮值,过程TestButtons同样会运行一致。

Select Case myButton

Case vbYes

Workbooks.Add

Case vbNo

MsgBox "You can open a new book manually later."

Case Else

MsgBox "You pressed Cancel."

End Select

你可以忽略Else子句,可以按下述方法修改一下Select Case语句:

Select Case myButton

Case vbYes

Workbooks.Add

Case vbNo

MsgBox "You can open a new book manually later."

Case vbCancel

MsgBox "You pressed Cancel."

End Select

4.       运行过程TestButtons三次,每次选择一个不同的按钮。

 

技巧5-6 通过Case Else捕捉错误

尽管在Select Case语句里使用Case Else不是强制的,使用它总是很好的,以防止万一测试有没有预料到的值。Case Else子句是个放置错误信息的好地方。

 

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

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

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

 

9.确定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当前值为99VB将变量unitsSold的值与Case子句的条件表达式进行比较。第一和第三条Case子句示范如何通过使用关键字To在条件表达式里使用数值范围。因为unitsSold=99,第一个Case子句里的条件表达式为真,因此,VB0.05赋给变量Discount。第二个Case子句如何呢?它也为真。尽管,很明显99小于等于500VB不会执行相关的语句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遇到Select Case语句时,它检查第一个Case子句里的值是否合储存于unitsSold里面的值是否匹配。如果匹配,VB给函数名称赋值百分之五(0.05),并且跳到关键字End Select。因为,在函数过程里面没有更多需要运行的语句,VB就返回主调过程——DisplayDiscount,在这里,它将函数的结果赋予变量myDiscount。最后的语句用信息框来显示获得的折扣。

 

10.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

 

技巧5-7 Case子句的多个条件

用来分隔开Case子句里面多个条件的逗号,和用于If语句里的运算符OR意义一样。只要这些条件有一个为真,Case子句就为真。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多