VBA提供了 if 和select case两种主要的判断结构,用于判断并执行可供选择的处理过程。
其中if语句更为灵活,select case在判断单个变量时更好。
if语句有三种形式:iif函数、单行的if语句、if结构。
1、iif函数:和Excel的工作表函数if相似。
Sub a()
x = Application.InputBox(prompt:="请输入一个数值", Type:=1)
y = IIf(x > 0, "大于0", "小于等于0")
MsgBox y
End Sub
执行结果为:
输入数值
判断结果
2、一行的if.....then......else......语句 。上面的iif函数可以改写为:
Sub ca()
x = Application.InputBox(prompt:="请输入一个数值", Type:=1)
If x > 0 Then MsgBox "大于0" Else MsgBox "小于等于0" 'Else部分可忽略
End Sub
iif函数与if语句的区别是,在单行的if语句中,Else部分是可选的,而iif函数的第三参数必须被定义。
3、如果需要判断(条件成立)后执行多个操作处理,可以使用if结构。
Sub vvvvv()
x = Application.InputBox(prompt:="请输入一个数值", Type:=1)
y = 0
If x > 0 Then '如果大于0则执行下面操作,否则不处理
x = x + 10 '操作1
y = x * 1000 + x '操作2
End If
End Sub
注意的是:每个完整的if结构,都是if开头end if结尾。在书写代码的时候,建议先写好完整的if结构,然后在if结构里面写各个处理过程。
如果不同的条件有不同的处理过程,可以使用Else。
Sub vvvvv()
x = Application.InputBox(prompt:="请输入一个数值", Type:=1)
y = 0
If x > 0 Then '如果大于0
x = x + 10 '操作1
y = x * 1000 + x '操作2
Else '否则(如果小于等于0)
x = x - 10
y = x * 1000 - x
End If
End Sub
如果if判断的条件更多,可以使用Elseif......Then。
Sub vvvvv()
x = Application.InputBox(prompt:="请输入一个数值", Type:=1)
y = 0
If x > 0 Then '如果大于0
x = x + 10 '操作1
y = x * 1000 + x '操作2
ElseIf x < 0 Then '如果小于0(注意这里有Then)
x = x - 10
y = x * 1000 - x
Else '如果等于0
x = 10086
y = 10086
End If
End Sub
if结构里的操作可以有多个,Elseif同样可以有多个,视乎实际判断的条件而定。
4、if结构的嵌套
If Not ThisWorkbook.Saved Then
l = MsgBox("您想保存变化吗?", vbQuestion + vbYesNo)
'第二层if结构
If l = vbYes Then
ThisWorkbook.Save
MsgBox ThisWorkbook.Name & "已保存"
End If
'第二层if结构
End If
上面代码,有两个 if 结构,字体加粗部分为第二层 if。
第一层if(外层),利用工作簿的Saved属性检查工作簿作出改变后是否保存过。
如果没有保存,在第二个if(内层)里面供用户选择是否保存,如果答案为“是”,则保存工作簿。
5、And、Or、Not在if语句中的应用
And、Or、Not三种逻辑运算常常配合if使用。
If score >= 60 And score < 80 Then MsgBox "及格"
上面的变量score需同时满足两个条件要求才会执行Then后面的操作。
If 部门 = "财务" Or 部门 = "人事" Then MsgBox "执行操作"
上面语句,部门只要是财务或人事,都执行Then后面的操作。
If Not numeric(x) Then MsgBox "执行操作"
上面语句,如果x变量不是数值,则执行Then后面的操作。