3.1 了解VBA的数据类型
在使用VBA时,不可避免地会遇到各种类型的数据,如:员工姓名、学生成绩、职工工资以及职工是否在职等。这些数据属于不同的类型,为了能够处理这些类型的数据,VBA对各种数据类型进行了定义,下面就来看看VBA中常见的数据类型。
3.1.1 认识VBA基本数据类型
数据是Excel VBA程序处理的对象,VBA应用程序可以处理多种类型的数据,其包括Excel单元格中可以保存和处理的数据类型,如数值、日期/时间、文本和货币等,同时还包含了在程序语言中常见的字节、布尔和变体数据等类型。
1.字符串(String)
字符串是一个字符系列,通俗地说就是一串文字。在VBA程序中,字符串需要放置于双引号中。这里要注意的是,双引号应该是半角状态的。字符串的表示形式如下:
"欢迎进入神奇的VBA世界"
如果字符串的长度为0,这样的字符串称为空字符串,其可以用在双引号中不包括任何字符来表示,如下面的语句:
""
VBA的字符串实际上分为两种类型,变长和定长的字符串。所谓变长的字符串指的是字符串的长度不确定,这类字符串最多可以包含231个字符串,也就是20亿个字符。定长字符串的长度是确定的,可以包含1~216个字符。
2.整型(Integer)和长整型(Long)
整型数据,可以将其理解为整数,也就是那些不带小数部分的数,其可以表示为正整数、负整数和0。整型数据是16位(即2个字节)的数值形式,可以是-32768~32767的值。在程序中,整型数据常用来表示整数,同时也可以用来表示数组变量的下标。整型数据的运算速度较快,而且比其他数据占用的内存少。
与整型数据相比,长整型数据只是数值的取值范围不同,占用内存空间的字节数不同而已。长整型数据是存储32位(即4个字节)的有符号数值,其范围是-2147483648~2147483647。
3.单精度浮点型(Single)和双精度浮点型(Double)
单精度浮点型数据和双精度浮点型数据都可以表示带有小数的数值,其中,单精度浮点型数据存储为32位(即4个字节)的浮点数值,其通常以科学记数法形式来表示,以E或e来表示指数部分。单精度浮点型数据在表示负数时,其值是位于-3.402823E38~-1.401298E-45的数据,而正数表示为1.401298E-45~3.402823E38的数据。
双精度浮点数据存储64位(即8个字节)的浮点数值,其负值的范围是-1.79769313486231E308~-4.94065645841247E-324,而正值的范围为4.94065645841247E-324~1.79769313486232E308。
4.货币型(Currency)
货币型数据是一种专门用于处理货币的数据类型,该数据类型是64位(即8个字节)的整型数值形式,其值的范围为-922337203685477.5808~922337203685477.5807。货币型数据在进行货币计算时很有用,由于众所周知的原因,这类运算场合对于计算精度的要求特别高。虽然浮点型数据比货币型数据的有效范围大,但有可能产生小的进位误差。
5.日期型(Date)
日期型数据可以存储日期和数据,该类数据为64位(即8个字节)浮点数值形式,其可以表示的日期范围从100年1月1日~9999年12月31日,时间从0:00:00~23:59:59。日期型数据在使用时必须以数字符号“#”括起来,如下面的语句。
#January 1,2013#
6.变体型(Variant)
变体型数据是VBA中一种特殊的数据类型,是一种可变的数据类型,可以存放任何类型的数据。当某个变量被指定为变体型时,VBA会自动完成数据类型的转换。在VBA程序中未经声明的变量会被自动设置为变体。变体型数据最大的劣势在于其需要占用较大的存储空间,因此一般情况下不建议使用这种数据类型。
7.布尔型(Boolean)
布尔型又称逻辑型,顾名思义,其用来表示逻辑值,其值只有两个,即True和False。在程序中使用布尔值可以用来表示逻辑判断的结果。当将其他数据类型转换为Boolean时,0将转换为False,其他值则转换为True。当将Boolean值转换为其他数据类型时,False转换为0, True转换为-1。
8.字节型(Byte)
字节型数据类型是一种数值型的数据,其用来保存0~255的整数,占用8位(即1个字节)的存储空间,字节型数据在存储二进制数据时是十分有用的。
9.对象型(Object)
对象数据存储为32位(即4个字节)的地址形式,其用来表示应用程序中的对象,如Excel工作簿、工作表或单元格等。在程序中,使用Set语句来将声明为对象型的变量赋值为任何对象的引用。
3.1.2 特殊的枚举类型
枚举类型是VBA中的一种特殊数据类型,当一个变量只有几种可能的值时,可以将其定义为枚举类型。枚举类型数据是将变量的所有可能值一一列举出来,属于该枚举类型的变量只能取枚举中的某一个值。在VBA程序中,枚举类型提供了一种处理常数的便捷方法。如在程序中定义一个枚举类型来表示星期与一组常数间的关系,此时在代码中就可以直接使用星期而不是使用数值来表示常数,这无疑会使程序具有更好的可读性。
在默认情况下,枚举中的第一个元素代表常数0,其后的常数比前一个大1。如下面语句定义了枚举型数据。
Public Enum Week 星期日 星期一 星期二 星期三 星期四 星期五 星期六 End Enum
这里,枚举类数据包含7个元素,它们为一周的7天,其中数据“星期日”表示常数0,数据“星期二”表示常数2。
在上面的代码中,如果希望“星期日”表示的是常数1,则可以对程序作如下更改。
Public Enum Week 星期日=1 星期一 星期二 星期三 星期四 星期五 星期六 End Enum
如果定义了枚举类型的数据,在程序中可以声明该枚举类型的变量并使用它。如在使用上面代码定义了Week枚举类型数据后,在“代码”窗口中定义变量的数据类型时,代码提示将能够获得该枚举类型,如图3-1所示。在枚举类型的变量赋值时,代码提示将给出枚举类型数据列表,如图3-2所示。
图3-1 显示枚举类型
图3-2 显示枚举类型数据列表
3.1.3 数据类型是可以自定义的
在VBA中,有一种数据类型称为自定义型,这是一种用户自定义的数据类型。使用这种自定义数据类型,可以更加灵活地处理许多复杂的数据问题。自定义数据类型实际上包含了一个或多个数据元素,换句话说,它就是一个多种数据类型的集合。
在VBA中,可以使用Type语句来定义自己的数据类型,其语法格式如下:
Type数据类型名 数据类型元素名As数据类型 数据类型元素名As数据类型 … End Type
这里,“数据类型名”为自定义数据类型的名称,“数据类型”为VBA的基本数据类型,当然这里也可以是用户已经定义了的自定义数据类型。下面的语句将自定义一个名为myType的数据类型。
Type myType myName As String myID As Number myBir As Date End Type
在这段代码中,定义了名为myType的自定义数据类型,该数据类型包含了3个数据元素,这3个数据元素的数据类型分别是String、Number和Date。