JSRUN 用代码说话

The If…Then…Else语句

编辑教程

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就会显示信息“NoBonus”。If…Then…Else语句应该用于决定执行两个操作中的哪一个。

当你要执行多个语句时,你最好使用多行格式的If…Then…Else语句:

If 条件 Then

如果条件为真时要执行的语句
Else

如果条件为假时要执行的语句
End If

注意,多行的If…Then…Else语句以关键字EndIf结束。使用上面显示的缩进使得程序结构易于阅读。

在下面的例子中,如果条件ActiveSheet.Name = “Sheet1”为真,VB就执行Then和Else之间的语句,并且忽略Else和EndIf之间的语句。

当条件为假时,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
     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 <= 6 Then
          MsgBox strmsg1
     Else
          MsgBox strmsg2
     End If
End Sub

上面的过程要求用户输入任意一个日期。用户提供的字符串通过一个内置函数CDate转变为Date数据类型,最好,函数Weekday将日期转变为一个指明该日期在一周里的天数(参见表5-3)。该整数储存于变量myDate里。条件测试用以检查变量myDate是否大于等于2以及小于等于6。如果测试结果为真,那么用户就被告知,该提供的数据是个工作日;否则,程序宣布这是个周末。

内置函数Weekday返回的值

表5-3 内置函数Weekday返回的值

4. 从VB窗口运行该程序。运行几次,每次提供不同的日期。对照你的桌面或日历检查VB的答案是否正确。

技巧:什么是结构化程序?

结构化编程要求所有的程序具有模块化的设计,并使用三种逻辑结构:顺序,决定和循环。顺序结构为一条接一条地执行语句;决定结构则是让你基于一些条件的测试来执行一些特定的语句;而只要某特定的条件为真,循环结构就重复地执行某条或某些语句。循环是下章的主题。在结构化编程里,其它一些逻辑语句,例如GoTo,是不允许的。结构化程序的代码容易跟踪——它从上到下平稳地走下来,没有任何跳跃到特定标志去的语句。下面就是一个结构化程序和非结构化程序的例子:

非结构化程序:

Sub GoToDemo()
Dim num, mystr
   num = 1
If num = 1 Then
   GoTo line1
Else
   GoTo Line2
Line1:
   mystr = “Number equals 1”
   GoTo LastLine
Line2:
   mystr = “Number equals 2”
LastLine:
   Debug.Print mystr
End sub

结构化程序:

Sub Structure()
    Dim num, mystr
    num = 1
    If num = 1 Then
       mystr = “Number equals 1”
       Debug.Print mystr
    Else
       mystr = “Number equals 2”
    End if
End Sub

上面的字程序EnterData提示用户选择任意单元格,然后单元格地址赋值于对象变量cell。If…Then…Else结构检查被选择的单元格是否为空。IsEmpty是个内置函数,用来决定某个变量是否已经被初始化了。如果该变量没有被初始化,那么IsEmpty函数返回true(真)。回想我们说过,当变量被赋予第一个值时,它就被初始化了。在本过程中,如果当前单元格为空时,VB将它当作一个零长度的字符串(””)。除了:

If IsEmpty(ActiveCell) Then

你还可以使用下述指令:

If ActiveCell.Value = "" Then

如果当前单元格为空,Then后面的语句就会被执行。该语句提示用户输入一个文本或数字,并且一旦数据被提供,该数据就会输入给当前单元格。

如果当前单元格不为空,VB将跳到子句Else后面的指令。该指令将让VB选择同列里的下一个单元格。

当你运行该过程,信息框提示你选择一个单元格,在工作表上,点击任何单元格。被选择的单元格地址就会出现在信息框的编辑框里面。

点击确定退出信息框。VB检查被选择单元格的内容并且跳到你过程里的true或false指令块(true指令块在Then后面,而false指令块在Else后面)。

JSRUN闪电教程系统是国内最先开创的教程维护系统, 所有工程师都可以参与共同维护的闪电教程,让知识的积累变得统一完整、自成体系。 大家可以一起参与进共编,让零散的知识点帮助更多的人。
X
支付宝
9.99
无法付款,请点击这里
金额: 0
备注:
转账时请填写正确的金额和备注信息,到账由人工处理,可能需要较长时间
如有疑问请联系QQ:565830900
正在生成二维码, 此过程可能需要15秒钟