VBA中的If…Then…ElseIf 语句
很多时候,你需要检查很多种情况,你可以使用子句ElseIf来将一些If条件结合在一起。使用If…Then…ElseIf语句,你可以比用前面章节中的If…Then…Else语句评估更多的条件。这里是If…Then…ElseIf语句的语法:
If 条件1 Then
条件1为真时要执行的语句
ElseIf 条件2 Then
条件2为真时要执行的语句
ElseIf 条件3 Then
条件3为真时要执行的语句
ElseIf 条件N Then
条件N为真时要执行的语句
Else
所有条件都为假时要执行的语句
End If
Else子句是可选的;如果当所有条件为假时,没有要执行的操作,那么你就可以忽略它。
技巧:ElseIf子句
你的程序里可以包括任何多个ElseIf子句和条件。ElseIf子句总是出现在Else子句之前的,只有当ElseIf子句的条件为真时,它的语句才会被执行。我们来看看下述例子:
If ActiveCell.Value = 0 Then
ActiveCell.Offset(0, 1).Value = "zero"
ElseIf ActiveCell.Value >0 Then
ActiveCell.Offset(0, 1).Value = "positive"
ElseIf ActiveCell.Value <0 Then
ActiveCell.Offset(0, 1).Value = "negative"
End If
该例检查当前单元格的值,并且在相邻的列贴上适当的“标签”(零,正和负)。注意,此时没有使用Else子句。如果第一种情况(ActiveCell.Value = 0)为假,VB将跳到下一个ElseIf语句,并且评估该条件(ActiveCell.Value>0),如果该值不大于0,VB将跳到下个ElseIf并检查条件ActiveCell.Value<0。
我们来看看If…Then…Else语句在一个完整的过程中如何工作:
1. 在当前工程里插入一新模块
2. 重命名模块为IfThenElseIf
3. 输入下列过程WhatValue:
Sub WhatValue()
Range("A1").Select
If ActiveCell.Value = 0 Then
ActiveCell.Offset(0, 1).Value = "zero"
ElseIf ActiveCell.Value > 0 Then
ActiveCell.Offset(0, 1).Value = "positive"
ElseIf ActiveCell.Value < 0 Then
ActiveCell.Offset(0, 1).Value = "negative"
‘End If (原文错误,多一个End If)
End If
End Sub
因为你需要运行过程WhatValue好几次来测试各种条件,所以,我们给它设置个临时的快捷键。
4. 打开立即窗口,并且输入下列语句:
Application.OnKey "^+y", "WhatValue"
一旦按下回车键,VB就会运行OnKey方法将过程WhatValue赋予组合键Ctrl+Shift+Y。这个键盘快捷键只是临时的——当你重新启动Excel后它就不起作用了。你同样也可以用Excel界面-工具菜单-宏对话框里的选项来设置快捷键。
5. 切换到Excel界面,并激活Sheet1
6. 在单元格A1里输入0,并且按下Ctrl+Shift+Y。VB将调用过程WhatValue并在单元格B1厘米输入“zero”
7. 在单元格A1里输入任意大于0的数字,并按下Ctrl+Shift+Y,VB将再次调用WhatValue。VB评估第一种条件,因为该测试的结果为假,所以它跳到ElseIf语句。第二个条件为真,因此VB执行Then后面的语句,并且跳过下一条语句,直接到EndIf。因为EndIf后面并没有其它的语句了,该过程便结束了,单元格B1现在显示“positive”。
8. 在单元格A1里输入任意小于0的数字,并按下Ctrl+Shift+Y。这次,前面两个条件都返回假,因此VB继续检查第三个条件。因为这次的测试为真,VB就在单元格B1里贴上标签“negative”
9. 在单元格A1里输入任何文本,并按下Ctrl+Shift+Y,VB的反应是“positive”,然而,这不是个满意的答案。你也许希望VB通过显示“text”来区分开正数和文本。要使你的过程WhatValue更“聪明”些,你就需要学习如何通过使用嵌套的If…Then语句来作一些更复杂的决定。