Excel VBA 编程基础 -- VBA 简介(四)
我们前面已经讨论过,表达式 5 + 3.5 是有意义的,这个表达式求值的结果是 8.5。同时也讨论过,表达式 "ok" + 5 是没有意义的,VBA 会显示“类型不匹配”的错误信息。那表达式 "123" + 5 有没有意义?我们前面已经讨论过,+ 是一个算术运算符,但 VBA 扩充了 + 的意义,使得 + 对于字符串操作数也有意义:- 如果 + 两边的操作数都是数值类型,则执行算术加法操作。
- 如果 + 两边的操作数都是字符串类型,则执行字符串拼接操作。
- 如果 + 两边的操作数一边是字符串,另一边是数值,则对字符串进行强制类型转换,试图将其转换为数值,此时会有两种情况:
- 如果转换成功,则执行算术加法操作。因此,表达式 "123" + 5 有意义:"123" + 5 => 123 + 5 => 128。
- "5" - “123” 和 "123" + "90" 的不同结果,说明 VBA 针对字符串只扩充了 + 运算符的意义,而 -、*、/ 运算仍然维持其算术运算符的意义。
- "123" - 10、"123" / 10、"123" * 5、5 / "5"、5 - "123"、"5" - "123":这些表达式的结果都说明算术运算符在遇到两边操作数类型不一致时,VBA 都试图将字符串类型的操作数转换为数值类型,如果转换成功,则执行算术运算。
- 3 - "Hello" 报告错误,说明 VBA 在试图将字符串转换为数值类型时不成功。
在说完算术运算符的操作规则之后,再来仔细考察一下数据类型。数据类型似乎是一个很抽象的概念,我们如果从分类(classification)的角度来理解,可能就会比较具象了。俗话说“物以类聚”,世界上的万事万物纷繁复杂,我们为了理解这纷繁复杂的物象,就“发明”了分类这把利刃。就拿描述世界的数据来说,因为物象的纷繁复杂,因此描述这物象的数据也五花八门:有描述定量特征的数字(number),有描述定性特征的符号(symbol),当然还有程序不能直接表示和处理的静态图像和动态影像。为了表示的方便和处理的效率,人们又把数字分为整型和浮点型。整型又区分为不同表达能力的子类型:Byte、Integer、Long、LongLong,浮点型也区分为不同精度的 Single 和 Double。因为计算机只能表示离散的数,为了最大程度地保持所处理数据的精度,又增加了 Currency 和 Decimal。对于符号来说,最初的计算机只能表示 ASCII 字符集中的符号。现在人们已经找到了标志世界大同的表达方式——Unicode。现在的 Unicode 不仅可以表示世界上几乎所有的文字,还可以表示很多表情符号。从以上的描述,我们可以得出结论:数据类型的本质是数据的分类,以及各类数据所能参与的运算。不同类型的数据所能参与的运算也不同,如我们反复讨论过的 "ok" + 5,"ok" 是一种类型的数据(符号),5 是另外一种类型的数据(数字):数字能参与算术运算,而符号则不能参与算术运算("123" + 5 有意义,是因为 "123" 是以符号形式表示的数字,"123" 和 "ok" 本质上是不同的)。至此,我们用四篇文章的篇幅简单介绍了 VBA 的基本数据类型以及表达式和运算的概念。有了数据类型的基本概念,就可以进入 VBA 编程的五彩世界了。