乐于分享
好东西不私藏

Excel VBA 编程基础 — 语句(四)- 条件语句

Excel VBA 编程基础 — 语句(四)- 条件语句

我们已经从前一篇文章中了解到 If 语句的强大:既可以简单到一条语句,也可以包含多条如果条件为真即需要执行的语句,还可以用嵌套结构表达非常复杂的选择。
今天我们讨论另外一条选择语句:Select Case … End Select。
还是先来看一个例子:
Dim wkDay As ByteDim wkDayName As String * 3wkDay = Day(Date) Mod 7Seelct Case wkDay  Case 1    wkDayName = "星期天"  Case 2    wkDayName = "星期一"  Case 3    wkDayBane = "星期二"  Case 4    wkDayName = "星期三"  Case 5    wkDayName = "星期四"  Case 6    wkDayName = "星期五"  Case 0    wkDayName = "星期六"  Case Else    wkDayName = "未知"End SelectDebug.Print "今天是" & wkDayName
这一小段代码是把用数值表示的星期几转换为文字表示。在讨论这个例子之前,先简单讨论一下日期。
VBA 中的日期
VBA 中的时间与日期是一个比较复杂的问题,我们以后会详细讨论,今天只就上面例子中涉及到的内容简单说一下。
Date 在 VBA 中有两重意义:
  • 数据类型:VBA 中,日期的数据类型用 Date 表示
  • 日期函数:同时 Date 还是一个日期函数,用来获取当前系统日期
看下面的例子:
Dim cd As Datecd = DateDebug.Print "Today is " & cd
这个例子中,首先声明变量 cd 为日期类型,然后用赋值语句把 Date 函数获取的当前系统日期赋给变量 cd,最后打印出 cd 的值,即当前的日期。
现在回到我们上面的例子。
首先声明两个变量:
  • Dim wkDay As Byte:一周 7 天,所以表示星期几是一个 0 到 6 之间的数,因此将变量 wkDay 声明为一个 Byte 类型就足以表示一周 7 天了。
  • Dim wkDayName As String * 3:用文字表示星期几,3 个汉字就够了,因此将变量 wkDayName 声明为一个长度为 3 的定长字符串即可。当然 wkDayName 也可以声明为变长字符串类型。
变量声明需要注意的事项:
  • 如果低阶类型足以表示变量的值域,尽量声明为低阶类型。譬如,wkDay 当然可以声明为 Integer 或 Long 甚至 LongLong 类型,这样声明,除了浪费内存空间之外别无意义,声明为 Byte 类型足矣。
  • 变量名称尽量取得有意义。你当然可以用 n 或 d 或随便其他什么名称来命名,但取名 wkDay 和 wkDayName,变量名称就足以说明该变量的意义与用途,无需再另加注释说明。这称为代码的“自文档化”(self-documenting)。
接下来的一行:
wkDay = Day(Date) Mod 7
首先我们已经知道,Date 是一个 VBA 函数,用来获取当前系统日期。Day 也是一个 VBA 函数,用来获取日期(date)中的日子(day)。譬如,如果当前系统日期是 2026-3-25,那么,Day(Date) 的结果就是 25。
我们知道了 Day(Date) 的意义,则 Day(Date) Mod 7 就是用当前的 day 作模 7 运算,获得当前的 weekday。譬如,已经上面 Day(Date) 的结果是 25,因此 Day(Date) Mod 7 => 25 Mod 7 => 4。
day 和 weekday
中文中没有专门表示 day 和 weekday 的词汇,汉语中的日期即表示 date,也表示 day。英文中的 date 是指由 年-月-日 构成的完整的日期,而 day 表示 年-月-日 中的 日。weekday 则表示一周中的第几天,即星期几。
注意:我们用 day 表示 年-月-日 中的 日,用 Day 表示 VBA 中用来获取 日 的函数。同理,我们用 date 表示 年-月-日 结构,用 Date 表示 VBA 中的数据类型和日期函数。weekday 和 Weekday 也一样,Weekday 也是 VBA 中的函数。
还是回到文章开头的例子。接下来是 Select … End Select 语句:
Select Case wkDay  Case 1    wkDayName = "星期天"  Case 2    wkDayName = "星期一"  ...  Case Else    wkDayName = "未知"End Select
与 If … End If 类似,Select 也需要一个结束标记,那就是 End Select。
在 Select Case wkDay 中,wkDay 是一个需要测试的变量,根据这个变量的值,在 Select … End Select 括起的内容中寻找对应的 Case。譬如,如果 wkDay 的值是 4,则会找到 Case 4 语句,然后执行 Case 4 下面的语句,即赋值语句:wkDayName = “星期三”。
如果找不到对应的 Case,如果有 Case Else 语句的话,则会执行 Case Else 下面的语句,此时 wkDayName 就会被赋以“未知”。
这个例子如果用 If … End If 来写,就是这样的:
Dim wkDay As ByteDim wkDayName As StringwkDay = Day(Date) Mod 7If wkDay = 1 Then  wkDayName = "星期天"ElseIf wkDay = 2 Then  wkDayName = "星期一"ElseIf wkDay = 3 Then  wkDayName = "星期二"ElseIf wkDay = 4 Then  wkDayName = "星期三"ElseIf wkDay = 5 Then  wkDayName = "星期四"ElseIf wkDay = 6 Then  wkDayName = "星期五"ElseIf wkDay = 0 Then  wkDayName = "星期六"Else  wkDayName = "未知"End IfDebug.Print "今天是" & wkDayName
两段代码功能是等价的,但 Select … End Select 结构比 If … End If 结构要清晰易懂。
相关阅读
Excel VBA 编程基础 — 语句(三)- 条件语句
本站文章均为手工撰写未经允许谢绝转载:夜雨聆风 » Excel VBA 编程基础 — 语句(四)- 条件语句

猜你喜欢

  • 暂无文章