将一个If…Then语句或If…Then…Else语句放在另外一个If…Then语句或If…Then…Else语句里面,你可以在你的VBA过程里作出更复杂的决定。这种一个If语句里包含另一个If指令块的结构称为嵌套的If语句。接下来的过程TestConditions是上节里的过程WhatValue的修正版,演示嵌套的If…Then语句是如何工作的:
Sub TestConditions()
Range("A1").Select
If IsEmpty(ActiveCell) Then
MsgBox "The cell is empty."
Else
If IsNumeric(ActiveCell.Value) Then
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.Offset(0, 1).Value = "text"
End If
End If
End Sub
为了使过程TestConditions更容易理解,每个If…Then语句都显示为不同的格式,现在你可以清楚地看到过程使用了三个If…Then程序块。
第一个If块(粗体)检查当前单元格是否为空,如果为真,就会显示信息,然后VB将跳过Else部分找到相应的End If,该语句位于关键字End Sub之前。
如果当前单元格不为空,IsEmpty(ActiveCell)条件返回假,并且VB运行粗体Else下面的单下划线的If块。该单下划线的If…Then…Else语句就是嵌套在第一个If块(粗体)的。该语句检查当前单元格是否是个数字。注意,我们通过另一个内置函数IsNumeric来做这个。如果当前单元格的值不是一个数字,条件就为假,因此,VB跳到单下划线的Else处,并且在B1里输入“text”。然而,如果当前单元格包含个数字时,VB就会运行双下划线的If块,评估每种情况并作出相应的决定。
第一个If块(粗体)被称为外部If语句,这个外部语句包含两个内部的If语句(单下划线和双下划线)。
技巧:嵌套语句
嵌套是指将一种控制结构放在另外一控制结构里面。你将在后面的循环结构里看到更多的嵌套的例子。
Select Case语句
Select Case 测试表达式
Case 表达式1
如果表达式1匹配测试表达式的语句
Case 表达式2
如果表达式2匹配测试表达式的语句
Case 表达式N
如果表达式N匹配测试表达式的语句
Case Else
如果没有表达式匹配测试表达式要执行的语句
End Select
你在关键字Select Case和End Select之间放置任意多个条件以测试。子句Case Else是可选的,当你希望可能有条件表达式返回假时使用它。在Select Case语句里,VB将每个表达式和测试表达式相比较。
Sub TestButtons()
Dim question As String
Dim bts As Integer
Dim myTitle As String
Dim myButton As Integer
question = "Do you want to open a new workbook?"
bts = vbYesNoCancel + vbQuestion + vbDefaultButton1
myTitle = "New Workbook"
myButton = MsgBox(prompt:=question, buttons:=bts, _ title:=myTitle)
Select Case myButton
Case 6
Workbooks.Add
Case 7
MsgBox "You can open a new book manually later."
Case Else
MsgBox "You pressed Cancel."
End Select
End Sub
Select Case myButton
Case vbYes
Workbooks.Add
Case vbNo
MsgBox "You can open a new book manually later."
Case Else
MsgBox "You pressed Cancel."
End Select
Select Case myButton
Case vbYes
Workbooks.Add
Case vbNo
MsgBox "You can open a new book manually later."
Case vbCancel
MsgBox "You pressed Cancel."
End Select
4. 运行过程TestButtons三次,每次选择一个不同的按钮。
尽管在Select Case语句里使用Case Else不是强制的,使用它总是很好的,以防止万一测试有没有预料到的值。Case Else子句是个放置错误信息的好地方。
作者:andy,如若转载,请注明出处:https://www.web176.com/vba/20256.html