Excel VBA 编程基础 -- 语句(六)- 条件语句(四)
- 2026-11-01 01:35:02
Excel VBA 编程基础 -- 语句(六)- 条件语句(四)前文我们讨论了 Select Case 语句中 Case 条件的各种表达方式,今天继续探讨这个话题。 讨论之前,还是把 Select Case 语句的一般形式写在下面: Case condition_n 表示有多个 Case 分支。Case Else 可以有,表示所有前面的条件都不满足的话,就到 Case Else 这里。如果没有 Case Else,而且所有的 Case codition_n 都不满足,则就相当于没有这个 Select Case 语句一样,跳过此 Select Case,直接执行此语句下面的语句。 textexpr 可以是一个变量,也可以是一个表达式。针对该变量(或表达式)的值,在下面的 Case condition_n 中寻找匹配者。如果找到了匹配者,则执行匹配 Case 下面的语句,如果没找到,但存在 Case Else,则执行 Case Else 下面的语句。如果不存在 Case Else 且没有找到匹配者,则跳过这个 Select Case 语句。 testexpr 既可以是数值型变量或表达式,也可以是字符串型的变量或表达式,当然也可以是布尔型变量或表达式。 前文讨论的都是数值型变量或表达式的情形,下面看一个布尔型变量或表达式的例子: 例4. 重写例1——判别奇偶数 此例中的 testexpr 是 n Mod 2 = 0,这是一个 Boolean 表达式,该表达式只可能有两个值:True 或 False。例子中的 Case True 和 Case False 涵盖了所有的情况。 再来看一个例子。 例5. 判别两数大小关系 这个例子很有意思,testexpr 是布尔值 True,这个 Select Case 语句的执行过程是:拿 True 和下面的 Case condition_n 相比较,譬如 a > b 的值等于 True 的话,则执行这个 Case 下面的 Debug.Print,输出 "a > b" 的结果。其他以此类推。 这个 Select Case 和下面的 Select Case 等价: 虽然两个 Select Case 语句等价,但第一个似乎更直观一些。 下面讨论 testexpr 为字符串型变量或表达式(以下简称字符串类型表达式,变量作为表达式的特例)的例子。 例5. 将一周七天由字符串形式转换为数值 同一天可能有不同称呼,这里只是按照最常用的三种称呼来判断。 例6. 判断当前 Excel 工作表中的选择 
图1 判断当前工作表中的选择 当前工作表中的选择是 Selection 对象,这个对象属于 Application,完整的隶属关系应该是 Application.Selection。 这个例子演示了 Select Case 的三个特点: testexpr 为字符串类型表达式时,需要注意字符串比较的方式,不同的比较方式可能导致不同的结果。 VBA 中字符串比较方式分为以下两种: 在 testexpr 为字符串表达式的情形下,根据比较方式的不同,同一个 Case condition_n 的结果可能会不同。对于上图的例子: 如果写成: 有可能会显示不同的结果,取决于当前的字符串比较方式。 VBA 的字符串比较方式由下面两条语句设置: 顾名思义,Option Compare Binary 设定字符串按照二进制编码来比较,此时将区分字符的大小写。而 Option Compare Text 则设定字符串按照文字来比较,不区分大小写。 注意:字符串比较方式不仅影响 Select Case,所有需要比较字符串的地方都受影响,譬如 If 语句,以及我们下面将会讨论的循环语句等。VBA 的默认设置是二进制方式。所以要根据自己的需求来设定字符串的比较方式。 如我们已经讨论过的 Option Explicit 语句一样,Option Compare 语句也必须置于代码文件的起始位置才能起作用。 相关阅读 Excel VBA 编程基础 -- 语句(三)- 条件语句 Excel VBA 编程基础 -- 语句(四)- 条件语句 Excel VBA 编程基础 -- 语句(五)- 条件语句(三)
Select Case textexprCase condition_nstatement_nCase Elsestatement_elseEnd Select
Dim n As Integer...Select Case n Mod 2 = 0Case TrueDebug.Print n & " is Even"Case FalseDebug.Print n & " is Odd"End Select
Dim a As IntegerDim b As Integer...Select Case TrueCase a > bDebug.Print "a > b"Case a < bDebug.Print "a < b"Case ElseDebug.Print "a = b"End Select
Dim a As IntegerDim b As Integer...Select Case aCase Is > bDebug.Print "a > b"Case Is < bDebug.Print "a < b"Case ElseDebug.Print "a = b"End Select
Dim wkDay As IntegerDim wkDayName As String...Select Case wkDayNameCase "星期天", "礼拜天", "周日"wkDay = 1Case "星期一", "礼拜一", "周一"wkDay = 2Case "星期二", "礼拜二", "周二"wkDay = 3Case "星期三", "礼拜三", "周三"wkDay = 4Case "星期四", "礼拜四", "周四"wkDay = 5Case "星期五", "礼拜五", "周五"wkDay = 6Case "星期六", "礼拜六", "周六"wkDay = 0End Select

testexpr 为字符串类型表达式的情况。 Select Case 的嵌套结构:与 If 语句一样,Select Case 语句也可以嵌套,组合成复杂的判断结构。 Case condition_n 所对应的 statement_n 可以包含多条语句。
Binary:说明字符串按照内部的二进制编码来比较,区分大小写。 Text:字符串按照文字形式来比较,不区分大小写。
...Select Case typNameCase "Range"......
...Select Case typNameCase "range"......
Option Compare BinaryOption Compare Text
本文来自网友投稿或网络内容,如有侵犯您的权益请联系我们删除,联系邮箱:wyl860211@qq.com 。