在生活中,我们要对各种各样的事情做出判断,如果明天天气好,我们就去爬山,否则就在家宅着,如果熬汤有点咸,我们就加点盐,淡了就加点水。程序编写的时候也会遇到许多需要判断的需求。
条件结构
在VBA编写程序时常常会用到"如果","就","否则",这就是程序中的条件结构。
VBA中的条件判断结构代码: if…Then …Else…End if
if 满足条件 Then
如果满足上面条件),做这些事情
Else
(否则,除了上面的事情外)做其它事情
End If
例子1:如果当前工作簿的工作表中单元格A1是空的,就给它填充绿色,否则填充为红色。
Sub Test1()
Dim Sht1 As Worksheet
Set Sht1 = ThisWorkbook.Worksheets("Sheet1")
'清空Sheet1单元格A1的状态
Sht1.Range("A1").Clear
'如果当前工作簿中Sheet1为空
If Sht1.Range("A1") = "" Then
'填充成绿色
Sht1.Range("A1").Interior.Color = vbGreen
Else
'否则填充成红色
Sht1.Range("A1").Interior.Color = vbGreen
End If
End Sub
在有些时候,单一的判断无法满足我们的需求,我们会遇到多重判断的情况。
if 满足该特定情况1 Then
做这些事情
Else if 满足特定情况2 Then
做这些事情
Else
如果前面那些特定情况都不满足,则做这些事情
End If
这段程序的核心结构,其中Elseif 的个数可以根据实际需要增加或减少。
例子2:
- 如果今天是星期一,就吃热干面,
- 如果今天是周二,就吃麻辣香锅,
- 如果今天是周三,就吃套餐,
- 如果今天是周四,就吃河粉,
- 如果今天是周五,就吃烤鱼,
- 如果今天是周末,就休息了。
Sub Test2()
Dim TodayDate As Date, TodayWeekDay As Integer
TodayDate = Format(Now(), "yyyy/mm/dd") '获取当前日期
TodayWeekDay = Application.WeekDay(TodayDate, 2) '通过Excel内置函数得到今天是周几
If TodayWeekDay = 1 Then
MsgBox "吃热干面吧"
ElseIf TodayWeekDay = 2 Then
MsgBox "吃麻辣香锅吧"
ElseIf TodayWeekDay = 3 Then
MsgBox "吃套餐吧"
ElseIf TodayWeekDay = 4 Then
MsgBox "吃炒河粉吧"
ElseIf TodayWeekDay = 5 Then
MsgBox "吃烤鱼吧"
Else
MsgBox "休息日"
End If
End Sub
注:Msgbox 是VBA编写中控制弹出提示框的方法,后面会详细讲解。
分支结构
我们在例子2中介绍了条件结构中的多重判断情况,如果我们想完成同样的功能,还可以用下面的VBA结构来表达:
Select Case …End Select
我们会发现Select Case …End Select 结构也能完成If … Then …End If结构的任务.
Select Case 表达式或变量
Case 表达式结果或变量在第1组数据中
执行这里的代码
Case 表达式结果或变量在第2组数据中
执行这里的代码
Case 表达式结果或变量在第2组数据中
执行这里的代码
Case Else 如果表达式结果或变量不在“上述结果中”
执行这里的代码
End Select
Sub Test3()
Dim TodayDate As Date
Dim TodayWeekDay As Integer
TodayDate = Format(Now(), "yyyy/mm/dd") '获取当前日期
TodayWeekDay = Application.WeekDay(TodayDate, 2) '通过Excel内置函数得到今天是周几
Select Case TodayWeekDay
Case 1
MsgBox "吃热干面吧"
Case 2
MsgBox "吃麻辣香锅吧"
Case 3
MsgBox "吃套餐吧"
Case 4
MsgBox "吃炒河粉吧"
Case 5
MsgBox "吃烤鱼吧"
Case Else
MsgBox "休息日"
End Select
End Sub
大家可以试敲一敲代码,练习一下,VBA无他,孰能生巧,多敲代码。