按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 Enter 键可回到本书目录页,按键盘上方向键 ↑ 可回到本页顶部!
————未阅读完?加入书签已便下次继续阅读!
6。 重新运行过程SimpleIfThen并输入数字52。当你输入正确的周数,VB将不会做任何事情,程序
就直接结束了。当用户猜对时,最好也显示一信息。
7。 在关键字End Sub前的另外一行输入下述指令:
If weeks = 52 Then MsgBox 〃Congratulations!〃
8。 再次运行过程SimpleIfThen并输入52。当你输入了正确的答案,VB不会执行语句MsgBox “Try
Again。”。如果提供的条件测试结果为假时,过程的执行结果就是忽略关键字Then右边的语句。
回想一下,VBA过程可以调用另外一个过程,我们来看看它是否可以调用本身
技巧5…1 If…Then语句的两种格式
If…Then语句有两种格式——单行和多行。这种短格式适合于可以写在一行里的语句,例如:
If secretCode 01W01 Then MsgBox “Access denied”
或者:
If secretCode = 01W01 Then alpha=True : beta = False
这里的secreCode,alpha和beta是变量名称。在第一个例子里,如果变量secretCode的值不等于
01W01,那么VB显示信息“Access denied”。在第二个例子里,当变量secretCode值等于01W01时,
VB就将变量alpha设置为真,变量beta为假。注意,执行的第二条语句用冒号与第一条语句分隔开
来。
如果当条件为真需要执行很多语句或将要执行的语句及其长时,多行的If…Then语句会更清楚,如
下例所示:
If ActiveSheet。Name = 〃Sheet1〃 Then
ActiveSheet。Move after:=Sheets _
(Worksheetsunt)
End If
在这个例子中,VB将会检查当前工作表的名称。如果它是“Sheet1”,条件ActiveSheet 。Name =
“Sheet1”将为真,并且VB将继续执行关键字Then后面的代码行。结果,当前工作表将会被移动到
工作簿的最后。
9。 按下面方法修改过程SimpleIfThen里的第一个If语句:
If weeks 52 Then MsgBox 〃Try Again〃 : SimpleIfThen
我们在原来的过程SimpleIfThen后面加上一个冒号和SimpleIfThen过程名称。如果用户输入了不正
确的答案,他将看到一信息,并且他一旦点击确定按钮后,他将获得另外一次机会来提供正确的答
案——输入框将再次出现。用户将能够不断地猜测答案,事实上,他不能适当地推出该过程,直到
他提供了正确的答案。如果他点击了取消按钮,他将不得不去处理不友好的错误信息“类型不匹配”。
在上章里,你看到了如何使用On Error GoTo标志语句来绕过错误,至少你在第十三章里学习更多
的关于错误处理的知识之前,你可以那么做。现在,你可以这样来修改你的过程SimpleIfThen:
Sub SimpleIfThen()
Dim weeks As String
On Error GoTo VeryEnd
weeks = InputBox(〃How many weeks are in a year:〃; 〃Quiz〃)
If weeks52 Then MsgBox 〃Try Again〃: SimpleIfThen
If weeks=52 Then MsgBox 〃Congratulations!〃
VeryEnd:
End Sub
104
… 页面 121…
10。 运行几遍过程SimpleIfThen,提供一些不正确的答案。你在程序里面加的错误捕捉指令使得用
户可以推出猜测,而不必面对这可恶的错误信息。
3。基于多于一个条件的决定
在上面段落里的过程SimpleIfThen里,If…Then语句仅评估一个条件,然而,这个语句可以使用一
个以上的条件。你必须使用逻辑运算符AND和OR(参见本章前面的表5…2)来明确If…Then语句里的
多个条件。这里是使用AND运算符的语法:
If 条件1 AND 条件2 Then 语句
在上面的语法例,条件1和条件2都必须为真,VB才会执行关键字Then右边的语句。例如:
If sales = 10000 AND salary = 50 Then
Range(〃A4〃)。Value = strmsg2
End If
If price 7 AND units 《 50 Then
Range(〃A4〃)。Value = 〃You didn't meet the criteria。〃
End If
End Sub
上面的过程IfThenAnd使用了四个If…Then语句来评估两个变量price和units的内容。在If…Then
关键字之间的运算符AND使得测试多于一个的条件成为可能。使用了AND运算符时,所有条件都必须
为真,VB才会去执行关键字Then和End之间的语句。因为过程的运行依赖于工作表单元格里输入的
数据,所以从Excel窗口来运行它比较方便。
2。 切换到Excel应用窗口,并且选择“工具”…“宏”…“运行宏”
105
… 页面 122…
3。 在宏对话框里,选择IfThenAnd并点击“选项”按钮
4。 给你的宏设置快捷键:Ctrl+Shift+I,并且退出宏对话框
5。 在工作表里输入以下数据:
6。 按下Ctrl+Shift+I运行过程IfThenAnd
7。 改变单元格B1和B2的值,以便你每次运行该过程时,不同的If…Then语句为真
技巧5…2 If指令块和缩进
要使If程序块更容易阅读和理解,可以使用缩进。对比下面的代码书写:
If condition Then
action1
End If
If condition Then
action
End If
看看下面的代码,你可以轻易知道该程序块开始在哪里,结尾又在哪里。
4。The If…Then…Else 语句
现在,你知道当一个或多个条件为真或为假时如何显示信息或采取行动。然而,如果你的程序需要
在条件为真时采取某个行动,而条件为假时采取另外一个行动,应该怎么办呢?你可以通过添加一
个Else子句就可以根据测试的结果将你的过程引导到一个合适的语句。If…Then…Else语句有两种
格式——单行和多行。单行的格式为:
If 条件 Then 语句1 Else 语句2
当条件为真时,执行关键字Then后面的语句,当条件为假时,则执行Else后面的语句。例如:
If Sales》5000 Then Bonus = Sales * 0。05 Else MsgBox “No Bonus”
如果储存在变量Sales的值大于5000的话,那么VB将使用下述公式:Sales * 0。05来计算股红
(bonus)。然而,如果变量Sales不大于5000的话,VB就会显示信息“No Bonus”。If…Then…Else
语句应该用于决定执行两个操作中的哪一个。当你要执行多个语句时,你最好使用多行格式的
If…Then…Else语句:
If 条件 Then
如果条件为真时要执行的语句
Else
如果条件为假时要执行的语句
End If
注意,多行的If…Then…Else语句以关键字End If结束。使用上面显示的缩进使得程序结构易于阅
读。在下面的例子中,如果条件ActiveSheet。Name = “Sheet1”为真,VB就执行Then和Else之间
的语句,并且忽略Else和End If之间的语句。当条件为假时,VB就忽略Then和Else之间的语句,并
且执行Else和End If之间的代码。
If ActiveSheet。Name = 〃Sheet1〃 Then
ActiveSheet。Name = 〃My Sheet〃 MsgBox 〃This sheet has been renamed。〃
Else
MsgBox 〃This sheet name is not default。〃
End If
让我们来看看程序示例:
1。 在工程Decisions(Chap05。xls)里插入一个新模块
2。 重命名该模块为IfThenElse
3。 输入下列过程WhatTypeOfDay:
Sub WhatTypeOfDay()
Dim response As String
Dim question As String
106
… 页面 123…
Dim strmsg1 As String; strmsg2 As String
Dim myDate As Date
question = 〃Enter any date in the format mm/dd/yyyy:〃 _
& Chr(13)& 〃 (e。g。; 11/22/1999)〃
strmsg1 = 〃weekday〃
strmsg2 = 〃weekend〃
response = InputBox(question)
myDate = Weekday(CDate(response))
If myDate 》= 2 AND myDate 0 Then
ActiveCell。Offset(0; 1)。Value = 〃positive〃
ElseIf ActiveCell。Value