3.3 必不可少的常量
常量,顾名思义,指的是在程序运行时其值不发生改变的量,这种量也可以称为常数。常量的值在程序被执行之前就已经确定好了,在程序执行过程中不会发生改变。在VBA中,常量分为三种类型,分别是直接常量、符号常量和系统常量。
3.3.1 直接常量
在VBA中,程序代码中直接书写的常量称为直接常量,如下面语句中的数字3.14就是一个直接常量。
Square=r*r*3.14
在程序中使用的直接常量也有数据类型的区别,其数据类型由其本身所表现出来的形式所决定。直接常量的数据类型包括下面4种。
● 数值常量:通俗地说,程序中的数字就是数值常量,其可以是整数、小数、十六进制数或八进制数等。如带小数点的负数-7.93。
● 字符常量:在程序中直接用到的数字、英文字母、特殊符号以及汉字等都属于这种常量类型。字符常量在程序中表现为可见的字符,必须使用双引号,这个双引号称为字符串的定界符。如果常量中包含了双引号,则需要在有双引号的地方输入两次双引号,如下面的语句。
"我说:""VBA实际上真的很简单!"""
注意:在这里,最后用了三个引号,其中前两个引号将输出一个引号“"”,最后一个引号为这个字符常量的定界符。
● 日期/时间常量:这也是在Excel VBA中很常见的一类常量,其用来表示某一天或某一个时间。与字符常量不同,其需要使用“#”作为定界符。日期/时间常量可以有多种形式,在使用日期/时间常量时,日期或时间必须要正确,如“#29/2/2017#”这个常量就是错误的,而“#28/2/2017#”这个常量就是正确的。大家看出问题所在了吧,2017年的2月没有29日。
● 布尔常量:布尔常量也称为逻辑常量,其只有两个值,True和False。
3.3.2 符号常量
很多情况下,在VBA程序中某个数据不会只使用一次,常量更是如此。对于这些需要在程序中反复使用的常量,可以为其命名,用一个符号名来代替它。这种用符号名来替代的常量,称为符号常量,使用符号常量具有下面这些明显的优势:
● 提高程序的可读性。符号常量具备有意义的符号名,程序员可以通过常量名来了解该常量的作用,这无疑会大大增强程序的可读性。
● 实现程序的快速修改。可以想一想,如果在一个程序中需要修改一个被多次使用的常数的值,你是否应该像捉虫那样翻遍程序的每一个角落将它们都找出来进行修改呢?这是多么考验人耐心和眼力的一件事情。但是如果使用了符号常量,这个问题就变得很简单了,你只需要在定义符号常量处对数据进行修改就可以了。
● 减少程序出错率。如果反复在程序中输入同一个数据,哪怕是最优秀的程序员都无法保证会永远不出错。程序中的某个细小的数据错误,将会导致计算结果的不同,这样的错误也是很不容易发现的。而使用符号常量则能够有效地减少这种错误的出现,因为只需要将数据定义一次就够了。
在程序运行过程中,不允许对符号常量进行赋值和修改,因此符号常量必须在程序运行前确定其值。符号常量的定义方式如下:
[Public|Private] Const常量名 [AS数据类型]=常数表达式
这里,Public用于在模块中声明符号常量,常量将能够在整个程序中可用。Private声明符号常量只能在所声明的过程范围内使用,也就是它是过程所私有的。如果省略了Public或Private,则默认为Private。Const为定义符号常数的关键字,常数表达式的值将一直保存在常数名中,常数值将不会更改。下面这些语句都将实现私有常量的声明:
Const PI=3.14 Private Const myStr AS String="VBA其实很简单"
下面的语句将声明公有常量:
Public Const myStr =“Hello, VBA! ”
下面的语句将实现在一行中同时声明多个常量:
Const myStr="Hello, VBA! ", PI AS Double=3.1416
注意:与变量一样,在自定义常量时,使用的常量名称是有一定限制的,如不能使用VBA的过程、语句或方法名,不能使用空格、句点(.)、感叹号(!)或诸如“@”“#”和“&”等符号。常量的命名规则和变量实际上是一样的。
3.3.3 系统常量
系统常量是VBA系统内部提供的一系列具有各种不同用途的符号常数。使用符号常数能够具有比直接使用常数更为直观和易懂的作用,如色彩常数中的vbRed表示红色,这显然比用数值0xFF0000要直观易懂得多。
在VBA中,系统常量可以与应用程序中的对象、方法和属性一起使用。在VBA中,系统常数名常采用大小写混合的格式,其前缀表示定义常数的对象库名。在Excel中,系统常量名通常是以小写的xl作为前缀,如设置工作簿显示状态属性的常量xlSheetVisible。VBA系统的内部符号常量则以vb作为前缀,如定义颜色的常量vbBlack和定义日期的常量vbSaturday等。
要查阅Excel VBA的系统常量,可以使用Visual Basic编辑器的“对象浏览器”。在Visual Basic编辑器中选择“视图”|“对象浏览器”命令打开“对象浏览器”,在“搜索文字”文本框中输入需要搜索的系统常量,单击“搜索”按钮。在“对象浏览器”中列出该变量所属的类以及该类包含的所有成员,如图3-7所示。
图3-7 在“对象浏览器”中查看系统变量