MyValue =(1=2) ’返回False
MyValue =("ab"< >"aaa") ’返回True MyValue =("周"<"刘") ’返回False
MyValue =(#2003/12/25#<= #2004/2/28#) ’返回True 3.逻辑运算符
用于逻辑运算,包括:与(And)、或( Or)和非(Not)3个运算符。
运用上述3个逻辑运算符可以对两个逻辑量进行逻辑运算。其结果仍为逻辑值.运算法则参见表8.8所示。
例如:
Dim MyValue ’变量定义
MyValue =(10>4 AND 1>=2) ’返回False MyValue =(10>4 OR 1>=2) ’返回True MyValue = NOT(4 =3) ’返回True 4.连接运算符
字符串连接运算符具有连接字符申的功能。有“&”和“+”两个运算符。“&”用来强制两个表达式作字符串连接,例如连接式:"2+3"&"="&(2+3)的运算结果为字符串“2+3=5”。
“+”运算符是当两个表达式均为字符串数据时,才将两个字符串连接成一个新字符串。如果连接式写为:"2+3"&"="+(2+3),则系统会提示出错信息“类型不匹配”。 二、表达式和优先级
将常量和变量用上述运算符连接在一起构成的式子就是表达式。例如,12*3/4-7 Mod 2+2>3就是一个表达式。
注意,在VBA中,逻辑量在表达式里进行算术运算,True值被当成-1、False值被当成0处理。 当一个表达式由多个运算符连接在一起时,运算进行的先后顺序是由运算符的优先级决定的。优先级高的运算先进行,优先级相同的运算依照从左向右的顺序进行。VBA中常用运算符的优先级划分如表8.9所示。
关于运算符的优先级作如下说明:
(1)优先级:算术运算符>连接运算符>比较运算符>逻辑运算符。 (2)所有比较运算符的优先级相同;也就是说,按从左到右顺序处理。 (3)算术运算符和逻辑运算符必须按表8.11所列优先顺序处理。
(4)括号优先级最高。可以用括号改变优先顺序,强令表达式的某些部分优先运行。
8.4 VBA流程控制语句
一个语句是能够完成某项操作的一条命令。VBA程序就是由大量的语句构成。 VBA程序语句按照其功能不同分为两大类型:
一是声明语句。用于给变量、常量或过程定义命名;二是执行语句,用于执行赋值操作、调用过程、实现各种流程控制。
执行语句可分为3种结构:
(1)顺序结构:按照语句顺序顺次执行。如赋值语句、过程调用语句等。 (2)分支结构:又称选择结构,根据条件选择执行路径。 (3)循环结构;重复执行某一段程序语句。
8.4.1 赋值语句
赋值语句是为变量指定一个值或表达式。通常以等号(=)连接。在前面我们已多次用到,其使用格式为:
[Let]变量名 = 值或表达式 这里,Let为可选项。 例如:
Dim txtAge As Integer txtAge = 21
Debug.Print txtAge
首先定义了一个整形变量txtAge,然后对其赋值为21,最后将整形变量txtAge的值输出在立即窗口中,语句按顺序执行。
顺序结构是在程序执行时,根据程序中语句的书写顺序依次执行的语句序列,其程序执行的流程是按顺序完成操作的。 8.4.2 条件语句
在实际应用中,只是使用顺序结构是远远不能完成复杂问题需求的。如果要想编写灵活的VBA程序,就要理解分支和循环的概念,分支结构使VBA能够根据条件判断做相关的决策,循环结构则可以提供多次运行一条或多条语句。
根据条件表达式的值来选择程序运行语句。主要有以下一些结构: 1.If-Then语句(单分支结构) 语句结构为:
If<条件表达式1>Then<条件表达式1为真时要执行的语句> 或
If<条件表达式1> Then
<条件表达式1为真时要执行的语句序列> End if
其功能是先计算条件表达式,当表达式哟值为True时,执行语句序列。单分支结构如图8.11所示。 例8.4 自定义过程Procedure1的功能是:如果当前系统时间超过12点,则在立即窗口显示“下午好!”。 在代码窗口输入下列自定义过程代码: Sub Procedure1()
If Hour(Time())>=12 Then Debug.Print\下午好!\ End Sub
将光标放在过程中,按F5运行程序,查看结果。
2.If-Then-Else语句(双分支结构) 语句结构为:
If<条件表达式1>Then<条件表达式1真时要执行的语句语句>Else<条件表达式1为假时要执行的语句> 或
If<条件表达式1>Then
<条件表达式1真时要执行的语句语句> Else
<条件表达式1为假时要执行的语句> End If
双分支流程结构图如图8.12所示。语句是否被执行,是根据语句前的条件表达式来确定的。表达式中
可能包含有额外的If-End If或其他流程控制结构。If-End If结构在另一个If-End If结构中出现的情况被称为条件结构嵌套。VBA中条件结构的嵌套数目和深度是有限制的。
例8.5 修改过程Procedure1,新增功能是,如果当前系统时间为12点至18点,则在立即窗口显示“下午好!”,否则显示“欢迎下次光临!”。 在代码窗口输入下列自定义过程代码: Sub Procedure2()
If Hour(Time())>= 12 And Hour(Time())<18 Then '不含18:00点 Debug.Print\下午好!\ Else
Debug.Print\欢迎下次光临!\ End If End Sub
3.If-Then-Elseif语句(多分支结构) 语句结构为: If<条件表达式1>Then
<条件表达式1为真时要执行的语句序列1> ElseIf<条件表达式2>Then
<如果条件表达式1为假,并且条件表达式2为真时要执行的语句系列2> …… [Else
<语句序列n>] End If
多分支结构流程图如图8.13所示。 注意.Ease和If间并没有空格。
例8.6 过程Procedure3功能:如果当前系统时间为8至12点钟之间,在立即窗口显示“上午好!”,系统时间为12至18点之间,则显示“下午好!”,其他时间均显示“欢迎下次光临!”。 在代码窗口输入下列自定义过程代码:
Sub Proeedure3()
If Hour(Time())>=8 And Hour(Time())<12 Then Debug.Print\上午好!\
ElseIf Hour(Time())>=12 And Hour(Time())<18 Then Debug.Print\下午好!\ Else
Debug.Print\欢迎下次光临!\ End If End Sub
例8.7 试用If-Else语句结构编程实现由:的值计算表达式y的值。
两个程序段均实现了计算y值的功能。 4.Select Case-End Select语句
当条件选项较多时,使用If-End If控制结构可能会使程序变得很复杂,因为要使用If-End If控制结构就必须依靠多重嵌套,而VBA中条件结构的嵌套数目和深度是有限制的。使用VBA提供的Select Case-End Select语句结构就可以方便的解决这类问题。 使用格式如下: Select Case表达式 Case 表达式1
表达式的值与表达式1的值相等时执行的语句序列 [Case 表达式2 To 表达式3]
[表达式的值介于表达式2的值和表达式3的值之间时执行的语句序列] [Case Is关系运算符 表达式4]
[表达式4的值之间满足关系运算为真时执行的语句序列] [Case Else]
[上面的情况均不符合时执行的语句序列〕