VBA的运算符和表达式

VBA的运算符和表达式——百度文库

本文从广义的角度将VBA的运算符进行了全面的归纳和总结,包括通常意义上的算术运算符、连接运算符、比较运算符和逻辑运算符,还包括了赋值运算符、点运算符以及Like运算符、AddressOf运算符等。同时,概述了表达式的知识。 


提示 学习是需要思考和实践的,只有举一反三,才能真正理解和掌握。因为VBA的一些运算符涉及到较强的逻辑关系,您在阅读本文时,可以不断思考它们之间的逻辑关系。同时,您可以在VBE编辑器的模块中测试本文中的一些语句和示例,以加深认识。 


在使用VBA编程时,您一定会经常使用到VBA运算符,它是VBA程序的重要组成部分。在本文中,我将运算符分为两大类,一类是通常意义上的运算符,即:算术运算符、连接运算符、比较运算符和逻辑运算符;另一类是与语句相关的运算符,即:赋值运算符和点运算符。此外,还简略地介绍一下Like运算符和AddressOf运算符。 

您通过使用运算符,对VBA各种元素进行连接,或者完成一些运算以形成了VBA表达式或语句。再进一步说,表达式是数字、字符串、常量、变量、对象成员、以及运算符的组合。 算术运算符和表达式 


■ 算术运算符包括+(加法运算符)、- (减法运算符)、/ (除法运算符)、\(整除运算符)、Mod(取模运算符)、^(乘幂运算符),下面逐一进行介绍。 
+ 加法运算符。形成数值表达式,并将数值或数值表达式相加。也可用于连接两个字符串变量,但建议用连接运算符进行连接。例如,结果=表达式1+表达式2。 
- 减法运算符。形成数值表达式,将数值或数值表达式相减。也可用在数值之前,用于表示负数。例如,结果=表达式1-表达式2。 
* 乘法运算符。形成数值表达式,将数值或数值表达式相乘。例如,结果=表达式1*表达式2。 / 除法运算符。形成数值表达式,将两个数值或数值表达式相除,其中除数不能为零,否则会得到一个错误。例如,结果=表达式1/表达式2。 
\ 整除运算符。将两个数值或数值表达式相除,并返回一个整数,即舍掉余数或者小数部分。例如,结果=表达式1\表达式2。例如,7\3的值为2。 
Mod 取模运算符。将两个数值或数值表达式相除,并只返回余数。例如,结果=表达式1 Mod 表达式2。例如,7 Mod 3的值为1。 
^ 乘幂运算符。计算数值或数值表达式的乘幂。例如,结果=数值 ^ 指数。 ■ 算术运算符的优先顺序 
算术运算符的优先顺序依次为:乘幂运算符(^)——乘法和除法运算符(*、/,两者没有优先顺序)——整除运算符(\)——取模运算符(Mod)——加法和减法运算符(+、-,两者没有优先顺序)。若在同一代码中多次使用同一个算术运算符,则从左到右运算。使用括号可以改变优先顺序。 连接运算符和表达式 
& 连接运算符,用于连接字符串。它能把一些字符串变量连接在一起,形成一个新的字符串。在进行连接运算之前,任何非字符串变量或表达式都转换为字符串。例如,结果=字符串1&字符串2,其结果的数据类型为String类型。 
+ 混合连接运算符,它运用很灵活,但会与加法运算符相混,给您的阅读带来不便。例如,结果=表达式1+表达式2,其结果的数据类型取决于表达式的数据类型。 下面对这两种连接运算符进行测试,测试表达式为:     结果=表达式1+表达式2 
当两个表达式都是数值数据时,用&运算符会将两个数值数据连接,如5 & 1连接后为51,但用+运算符后,会将两数值相加得到其结果,如5+1进行连接后为6。当两个表达式都是字符串(Sting)时,将对两个字符串进行连接为一个字符串。当两个表达式为空时,+运算符的结果为0,而&运算符的结果为Null值。当一个表达式为数值类型数据,另一个表达式为字符串类型数据时,+运算符将产生类型不匹配的错误,而&运算符则将两个表达式连接。未声明变量时,当一个表达式为数字,另一个表达式为字母时,+运算符和&运算符的结果均为数字,如j=7,k=student,i=j+k与i=j&k的结果均为7。当两个表达式都为空时,+运算符结果为0,而&运算符结果为Null值。 

提示 您可以在VBE中调试,看看它们在各种情况下的区别。 比较运算符和表达式 


■ 比较运算符包括<(小于)、>(大于)、=(等于)、>=(大于或等于)、<=(小于或等于)、<>(不等于),用于数据元素的比较,其一般的语法为: 
    结果=表达式1 <比较运算符> 表达式2 
结果为True(1)、False(0)或者为Null。其中比较运算符可以单独使用,也可以两两结合使用。如果表达式1或者表达式2本身为Null时才会产生Null的结果。 
下面结合上述语法,对这些比较运算产生的结果为True或False时所需要的条件进行说明: > 表达式1大于并且不等于表达式2时,其结果为True;否则,为False。 < 表达式1小于并且不等于表达式2时,其结果为True;否则,为False。 = 表达式1等于表达式2时,其结果为True;否则,为False。 
>= 表达式1大于或者等于表达式2时,其结果为True;否则,为False。 <= 表达式1小于或者等于表达式2时,其结果为True;否则,为False。 <> 表达式1不等于表达式2时,其结果为True;否则,为False。 
比较运算符可用于数值比较或字符串变量比较,也可用于数值与字符串的比较。如果其中一个表达式是数值,另一个是字符串,则数值表达式总是“小于”字符串表达式;如果都是字符串,则最大的字符串就是最长的字符串;如果字符串一样长,则小写的大于大写的。 
还有一个比较运算符,即Is运算符,可用于判断两个对象变量是否指向同一个对象,其语法为:     结果=对象1 Is 对象2 
如果对象1和对象2都指向同一个对象,其结果为True;否则,结果为False。 

还可以用Is运算符来判断一个对象变量是否符合要求,例如,条件判断语句If objVar Is Nothing Then 表明,如果对象变量objVar没有对象引用,则为True,执行Then后面的语句。

 

■ 比较运算符的优先顺序。如果多个比较运算符出现在同一行代码中,则按从左到右的顺序计算。 逻辑运算符和表达式 


■ 逻辑运算符允许对一个或多个表达式进行运算,并返回一个逻辑值。VBA的逻辑运算符包括:And(逻辑与)、Or(逻辑或)、Not(逻辑非)、Eqv(与或)、Imp(蕴含)、Xor(异或)。 And 执行逻辑与运算,即如果表达式1和表达式2都是True,则结果返回True;只要其中一个表达式为False,其结果就是False;如果有表达式为Null,则结果为Null。其语法为: 结果=表达式1 And 表达式2 

例如,If x>1 And y<10 Then,表示如果x的值大于1且y的值小于10时,就执行Then后面的代码。又如,语句MsgBox ActiveSheet.Name=”Sheet2” And Range(“A1”)=1表示如果当前工作表名为Sheet2并且当前工作表上的单元格A1的值为1时,消息框将显示True。

 

Or 执行逻辑或运算,即如果表达式1或者表达式2为True,或者表达式1和表达式2都为True,则结果为True;只有两个表达式都不是True时,其结果才为False;如果有表达式为Null,则结果也是Null。其语法为: 
    结果=表达式1 Or 表达式2 

例如,If x>1 Or y<10 Then,表示如果x的值大于1,或者y的值小于10,则执行Then后面的代码。又如,语句MsgBox Range(“A1”)=1 Or Range(“B1”)=2表示如果当前工作表中的单元格A1中的值为1或者单元格B1中的值为2时,消息框将显示True。

 

Not 对一个表达式进行逻辑非运算,即如果表达式为True,则Not运算符使该表达式变成False;如果表达式为False,则Not运算符使该表达式变成True;如果表达式为Null,则Not运算符的结果仍然是Null。其语法为: 
    结果=Not 表达式 
例如,If Not IsError(x) Then,如果IsError返回False则执行Then后面的代码,表示x中不包含错误。 

又如,语句Selection.Font.Bold=Not Selection.Font.Bold,其中Bold属性的值为True或False,使用Not运算符会将值False改为True,将值True改为False,这样可用于切换所选单元格是否“加粗”。这也是VBA程序编写时的一个技巧,我们可以运用Not运算符模仿工具栏“加粗”、“斜体”等按钮的工作模式,如当我们点击“加粗”按钮时,所选单元格中的字体将加粗显示,再次单击“加粗”按钮,单元格中的字体又正常显示了。 

Eqv 执行与或运算,即判断两个表达式是否相等,当两个表达式都是True或者都是False时,结果返回True;若一个表达式为True而另一个表达式为False时,结果返回False。其语法为:     结果=表达式1 Eqv 表达式2 


Imp 执行逻辑蕴含运算,其语法为:     结果=表达式1 Imp 表达式2 

当两个表达式都为True和两个表达式都为False时,其结果为True;当表达式1为True,表达式2为False时,其结果为False;当表达式1为False,表达式2为True时,其结果为True;当表达式1为False,表达式2为Null时,其结果为True;当表达式1为True,表达式2为Null时,其结果为Null;当表达式1为Null,表达式2为True时,其结果为True;当表达式1为Null,表达式2为False时,其结果为Null;当两个表达式都为Null时,其结果为Null。上面的表述可能有点绕口,概括地说,不管表达式1,当表达式2为真时,其结果为True;当两个表达式都为False,或者表达式1为False,表达式2为Null时,其结果为True;当表达式1为True,表达式2为False时,结果为False;其它情况则为Null。

 

Xor 执行逻辑异或运算,用于判断两个表达式是否不同。若两个表达式都是True或都是False时,其结果就是False;如果只有一个表达式是True,其结果就是True;如果两个表达式中有一个是Null,其结果是Null。其语法为: 

结果=表达式1 Xor 表达式2 ■ 逻辑运算符的优先顺序 


逻辑运算符的优先顺序依次为:Not——And——Or——Xor——Eqv——Imp。如果在同一行代码中多次使用相同的逻辑运算符,则从左到右进行运算。 运算符的优先顺序 
如果您不了解运算符的优先级别(即哪个运算符优先运算,哪个运算符最后才运算),您的表达式可能会出现意想不到的结果。在前面的小节中,介绍了同一类运算符的优先顺序。如果在一行代码中包括多个运算符,则其进行运算的优先顺序是不相同的。运算符的优先级会影响到表达式的最终结果。 
当一行代码中包括几类运算符时,其优先顺序为:算术运算符——连接运算符——比较运算符——逻辑运算符。 

如果您要改变同类或不同类运算符的优先顺序,可以使用括号,括号内的表达式总比括号外的优先进行运算。 




Like运算符 

Like运算符用于判断给定的字符串是否与指定的模式相匹配,其语法为: 结果=字符串 Like 模式 

其中,字符串为要与模式相比较的字符串,如果字符串与指定的模式相匹配,则结果为True;否则,其结果为False。如果字符串或者模式Null,则结果为Null。

 

在模式中可使用一些特殊字符,其它的字符都能与它们相匹配,

这些字符有:

?代表任意一个字符;

*代表0或多个字符;

#代表任意一个数字(0-9);

[charlist]代表字符列表中的任意一个字符;

[!charlist]代表不在字符列表中的任意一个字符;

[]代表空字符串(“”)。 

Charlist将模式中的一组字符与字符串中的一个字符进行匹配,可以包含任何一种字符,包括数字;

在Charlist中使用连字号(-)产生一组字符来与字符串中的一个字符相匹配,如[A-D]与字符串相应位置的A、B、C或D匹配;

在Charlist中可以产生多组字符,如[A-D H-J];

各组字符必须是按照排列顺序出现的;

在Charlist的开头或结尾使用连字号(-)或以与连字号自身相匹配,例如[-H-N]与连字号(-)或H到N之间的任何字符相匹配;

在Charlist中的一个字符或者一组字符前加上!号,表明与该字符或该组字符之外的所有字符匹配,如[!H-N]与字符H-N范围之外的所有字符匹配;

而在[]外使用!号则只匹配其自身。

要使用任何特殊字符作为匹配字符,只需将它放在[]中即可,例如[?]表明要与一个问号进行匹配。

下面给出一个例子。 

打开一个工作簿,选择菜单“工具——宏——Visual Basic编辑器”或按Alt+F11组合键,打开VBE编辑器。

在VBE编辑器中,选择菜单“插入——用户窗体”,新建一个用户窗体,点击控件工具箱中的“文本框”控件和“按钮”控件,在用户窗体上放置一个“文本框”和一个“按钮”,并在用户窗体中对它们的大小和位置进行合理调整,双击刚创建的“按钮”控件,并输入下面的代码:

 Private Sub CommandButton1_Click()   

Dim sEnd As String, sPattern As String   

sEnd = "in Office" 

  sPattern = "[F W]*" & sEnd 

  If TextBox1.Text Like sPattern Then

     MsgBox "输入正确"  

 Else 

    MsgBox "输入错误"  

End If 

End Sub 

本代码中[F W]*表示字符以F或W开头的字符串,使用&连接符将其与变量sEnd所代表的字符串“in Office”相连接。如果您在文本框中输入以字符F或字符W开头并以“in Office”结尾的句子,将显示“输入正确”消息框,否则将显示“输入错误”的消息框。

在VBE编辑器中点击运行按钮或按F5键,运行该代码试试。

当您在文本框中输入“Fanjy in Office”后,单击按钮,将显示“输入正确”消息框。




 AddressOf运算符 

AddressOf运算符将过程的地址传递给API函数。其语法为     AddressOf 过程名 
其中,过程名为需要传递给API函数地址的过程名称。AddressOf运算符后面必须是用户定义的函数名、过程名或属性名,且该过程或函数必须保存在代码模块中。 赋值运算符 
在VBA中使用等号(=)作为赋值运算符,它将其右侧的数据或者表达式的结果赋给左侧的变量,使其在程序代码中运用。例如,x=666,Range(“A1”).Value=”Dog”。 点运算符 
在VBA中,使用点运算符来引用某个对象。运用点运算符,可以限定所引用的对象的位置,清楚地表明该对象的层次结构,还可以指定某对象的方法或属性。例如,语句Workbooks(“Book1.xls”).Worksheets(“Sheet1”).Range(“A1”)表明对工作簿Book1中的工作表Sheet1上的单元格A1的引用;又如,语句Msgbox Worksheets(“Sheet1”).Range(“A1”).Value表明显示当前工作簿中工作表Sheet1上单元格A1的值。
很详细的VBA语法介绍: 一、VBA入门知识 。。。 二、了解对象、属性、方法事件 1、了解对象、属性、方法事件 2、Application 对象 3、Workbook 对象 4、Workbooks 属性 5、Range 对象 6、Range 属性 7、Cells 属性 。。。 三、VBA语法 (一)Visual Basic 的命名规则 1、写 Visual Basic 语句 2、写声明语句 3、Dim 语句的语法 4、Activate 方法的语法 5、Set 语句 3 6、MsgBox 函数的语法 7、选项语句的语法 8、AddressOf 运算符 9、了解变体 10、写赋值语句 11、写可执行的语句 12、Public 语句 13、Private 语句 14、使用数组 15、使用常数 16、AppActivate 语句 17、Beep 语句 19、Date 语句 20、Error 语句 21、Exit 语句 22、GoSub...Return 语句 23、GoTo 语句 24、Input # 语句 25、Let 语句 26、Load 语句 27、Name 语句 28、On...GoSub、On...GoTo 语句 29、Open 语句 30、Rem 语句 31、Stop 语句 32、Time 语句 33、While...Wend 语句 (二)逻辑语句 1、If...Then...Else 语句 2、使用 Select Case 语句 3、使用 For...Next 语句 4、For Each...Next 语句 5、 Do...Loop 语句 6、 With 语句 (三)过程 1、写 Sub 过程 2、写 Function 过程 3、写 Property 过程 四、 ActiveX 控件 1、AfterUpdate 事件 2、Click 事件 3、Click 事件、命令按钮控件、Accelerator Caption 属性示例 4、DblClick 事件 5、Error 事件 6、KeyDown KeyUp 事件 7、KeyPress 事件 8、KeyPress 事件示例 9、MouseDown MouseUp 事件 10、MouseMove 事件 11、列表框控件 12、SpinDown SpinUp 事件 13、SpinDown、SpinUp 事件 Delay 属性示例 14、组合框控件 15、命令按钮控件 。。。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值