数据是程序处理的对象,在程序中一般以常量和变量两种形式出现。数据类型在数据结构中的定义是一个值的集合以及定义在这个值集上的一组操作。因为值以及值集上的操作不同,所以数据分为不同类型的数据。不同类型的数据存储方式不同。
数据类型不同,存储方式不同。我们以数值型数据为例来看一下数据在计算机中是如何存储的。数值在计算机内部都是以二进制的形式来表现的,否则,计算机无法对它们进行处理。数值有正负和大小,我们一般取最左边一位(最高位)作为符号位,0表示数据为正,1表示数据为负。计算机中的数分为整数和实数两大类。整数和实数的区别在于小数点,整数可以看成小数点固定在个位数的右边,所以整数也被称为定点数;实数既有整数部分又有小数部分,小数点位置不固定,所以实数也称为浮点数。
我们假设整数在内存中用两个字节存储,整数在计算机中有原码、反码、补码等不同的表示方法,一般我们采用补码表示整数。其中,正数的原码、反码、补码都相同,都是最高位(符号位)为0,其余各位表示数值。而负数的原码、反码、补码有所不同:负数的原码是符号位为1,其余各位表示数值的绝对值;反码是符号位为1,其余各位对原码取反;补码是反码加1。所以我们可以写出两个字节表示整数的数的范围是从1000000000000000到0111111111111111,即-32 768到+32 767。
实数可以表达成一个乘幂和一个纯小数之积,如-1 001.011=(-0.100 101 1)*2 100 ,其中,指数我们称之为阶码,而纯小数我们称之为尾数。存储实数的时候,我们一般都表示成规格化形式,将其分为三部分:符号位、阶码和尾数。规格化的形式有多种,目前绝大多数处理器采用IEEE754标准,我们在这里不做详细讨论。可以看到,相同长度的浮点数和定点数,浮点数可表示的数的范围要比定点数大很多。
西文字符在计算机中存储的是其ASCII码,而ASCII码在内存中占一个字节。如“a”的ASCII为97,它在内存中存储为:01100001(最高位补0)。
中文字符在计算机中存储的也是它的编码,目前我国信息处理采用的汉字编码标准为GB18030,汉字一般使用双字节保存,编码不在本书范围,在此不进行详细讨论。
VBA提供的基本数据类型主要有数值型、字符串型、日期型、布尔型等12种,如表2-1所示。
表2-1 VBA的基本数据类型
在VBA中,除了以上基本数据类型之外,还有用户自定义数据类型。由表2-1可以看到,不同的数据类型在内存中所占的空间是不一样的,为了提高执行效率,我们应尽可能选择占用字节最少又能处理当前数据的数据类型。其中,变体型数据是一种特殊的数据类型,它是VBA的缺省数据类型,可以存储各种类型的数据。
如果基本数据类型不能满足需要,那么VBA允许用户自定义数据类型。自定义数据类型通常由多个基本数据类型的数据组成。用户自定义数据类型使用Type语句来完成,它的语法格式如下:
[Private|Public]Type自定义数据类型名称
元素1名称[()] As 数据类型
元素2名称 As 数据类型
……
元素n名称 As 数据类型
End Type
例如,以下语句定义一个用户自定义类型teacher,包括no、name、dep、age四个元素。
Type teacher
no As String
name As String
dep As String
age As Integer
End Type
定义之后,teacher就作为一种新的数据类型保存在系统里,用户可以在“对象浏览器”窗口查看刚才定义的数据类型。按快捷键F2打开对象浏览器窗口,输入文本“teacher”点击“查找”按钮 ,可以看到刚定义的数据类型,如图2-1所示。
图2-1 用户自定义数据类型