7.3.6 数组

7.3.6 数组

使用变量的目地在于临时存放数据,但一个变量名只能存放一个数据。如果要将一组数据临时存放,使用变量形式,就必须分别定义多个变量名,这对于有大量且有一定联系的数据需要保存的程序而言,比较麻烦。

数组和变量一样,也是用于存放程序需要的临时数据,但不同的是:一个数组名可以拥有多个数组元素,每一个数组元素可以像变量一样存放一个临时数据。实际上,我们可以理解为数组就是由若干个连续的变量组成的一种特殊的内存变量。所以,简单地说,数组就是一组数据元素的集合。

和变量不同,因为数组要预先设定元素个数,因此,数组必须先声明后使用,声明的作用就是指定元素个数,通知计算机为这些元素留出相应的连续空间。

数组的声明和变量声明类似,唯一不同点在于,它比变量声明多了个“下标表”参数,其语法格式如下:

Dim|Public|Private|Static <数组名1>(<下标表>)As <数据类型>[,<数组名2>(<下标表>)As <数据类型>…]

注意:

(1)数组名命名规则与变量名命名规则相同。

(2)下标表必须为常数或常数表达式(即不能为变量),下标表可以由一个或多个常数构成,如果有多个常量,它们之间用逗号隔开。如果下标表只有一个常量,该数组就是一维数组,下标表如果有两个常量,该数组就是二维数组,如果有多个常量,就是多维数组。下标表中的常量是数组的下标上界,定义数组时,实际上还隐含了一个下标下界值,默认值为0,下标下界和下标上界共同限定了数组元素个数。例如:

dim a(5)as Integer,b(1,2)as String

该语句定义了两个数组a与b,a中默认含有6个元素,其元素下标为0到5,即a(0)、a(1)、a(2)、a(3)、a(4)、a(5),6个数组元素。b中默认含有6个元素,其元素下标一维为0到1,二维为0到2,即b(0,0),b(0,1),b(0,2),b(1,0),b(1,1),b(1,2)。

下标下界默认为0,如果需要,也可以强制指定下标下界从1开始,使用语句为:

Option Base 1

该语句必须放在模块的通用声明段中,如果在模块中使用该语句后,下标下界就是从1开始,而不再是从0开始了。相应的,上面例子中声明的数组a与b,其元素个数a 为5个,即a(1),a(2),a(3),a(4),a(5),b为2个,即b(1,1),b(1,2)。

与变量一样,数组被定义后,每个数组元素都自动获得一个初始值,按照其声明数据类型不同,VBA自动将数值类型的数组元素赋初值为0,字符型赋初值为一个空字符串(""),变体型被初始化为空,布尔型被初始化为False。

(3)数组赋值与变量一样,即使用赋值语句给数组赋值,如上例中定义的a和b数组,可对其数组元素赋值如下:

img365

(4)同变量一样,数组也可以用String、Integer等关键字限定数组的数据类型,当数组指定数据类型后,该数组中所有元素存放的值就只能是该类型数据,如上例中,a被定义为整型(Integer),b被定义为字符型(String),在赋值时,必须如上例那样给a(1)赋值整型数2,而不能赋值其他类型值。如果类型指定为Variant,可以赋值不同类型值,声明时省略类型,默认为变体型。数组元素可以接收不同类型的值。例如,dim c(3)赋值时,可以如下所示:

c(1)=123 

c(1)="abc"

即数组c的第一个元素在赋值时,第一次被赋值数值型123,第二次又被赋值为字符型“abc”。

(5)和变量一样,数组也有生命周期和作用域范围,在不同位置和使用不同的关键字,数组也分为局部、模块、全局三个级别。