
VBA中的“=”应该是最简单易懂的符号之一了,它与我们所学的数学等号几乎相通:小学数学中它是“天平”,保证两侧平衡无差;初中数学它变成了“通道”,从右侧“传值”给左侧;总结起来“=”的作用只有两个:比大小和赋值!
这听起来很简单,但在实际程序中的运用很可能让人头疼,比如下面这段代码,你知道程序执行后A1及A2单元格会显示的数据各是多少?

我们可以先用初中的代数逻辑做下简单的推理:x、y分别被赋值10和20,之后x、y均被新值30覆盖,所以最终x、y均为30,A1和A2均显示30。来看看运行结果吧:

全错!大失所望,是吗?数学的逻辑都崩塌掉了?……
不用着急,先思考一下:等号的作用只有比大小和赋值两种,如果是比大小其左右两侧的值均不会发生变化,赋值则会造成左侧量值变化!我们顺着这个思路找下去,也许可以发现问题所在。
代码第三行插入一句Msgbox直接输出x、y的值,以此检验前两句代码x及y是否确实被赋值:

没问题,程序声明的两个整型变量x、y确实被成功赋值(分别为10和20)!但后续代码x=y=30这样的连等操作使x的值由10变成了0,y值并没有发生变化!换句话说,x=y=30表达式中的“y=30”只是在比大小,所以y值没变;x后面的“=”一定是赋值而且所赋之值为0,所以造成x值改变,而且还可以推出 “y=30”这个式子比完大小后的结果为0;另外,整个式子的计算的顺序是从右向左!
也许,上述的式子写成这样更准确:x=(y=30)。翻译下是这样:y等于30吗?无论y是否等于30,请做出判断,并把这个判断结果赋值给x。
现在,我们直接弹窗检测y=30这个比较大小的式子其值是否为0。

结果为False!这就对了!看过我的《Excel VBA入门005----双面间谍(Boolean型变量)》的朋友也许现在已经明白了:y值为20不等于30,故y=30这样的大小比较其结果为False,False的本质是数值所以可以赋值给Integer类型的x,且False所对应的整数默认值正是0,故x的值为0!
现在我将整个代码添上备注供你细品:

这也引出一个针对VBA中连等甚至多等的独立表达式的简单规则:1.赋值动作只有一次且在最左侧(从左到右的第一个等号);2.整个式子计算顺序为:从右向左。
所以,下方代码的x、y结果你已经心中有数了,对吗?
