01 数组的声明

数组是VBA的变量,具有一群相同类型的成员,可以利用数组名和索引值进行访问。数组的声明与一般变量的声明一样,可以用Dim、Static、Private或Public语句来声明,在数组名后使用括号“()”,在括号中放置整数,定义数组包含的项目数。例如:



Sub Sample23()
Dim sArray(3) As String '定义数组sArray具有4个项目
sArray(0) = "黄蓉蓉"
sArray(1) = "女"
sArray(2) = "北京市朝阳区"
sArray(3) = "大学本科"
End Sub



数组中项目数的多少是以操作系统有多少可用内存为基础,若使用的数组大小超过了系统中可用内存总数,则速度会变慢,因为必须从磁盘中读写数据。

02 数组的基底

默认情况下数组的基底是0,即数组的最小索引的项目从0开始,例如sArray(3)代表sArray数组有4个项目,若是希望数组的基底是1,则可以在程序的开始(过程之外)用以下代码声明:

Option Base 1

这时程序语句“sArray(0) = "黄蓉蓉"”就是非法的,运行时会提示下标越界。

03 具有多重维度的数组

在VBA中最多可以声明60维的数组,但实际应用中很少用到超过3维的数组。例如,下列的语句声明一个5乘10的2维数组。

Dim sngArray1(1 To 5, 1 To 10) As Single

如果数组成矩阵,则第一个参数代表行,而第二个参数代表列,例如:

Dim sngArray1(4, 9) As Single

可以代表4行9列的矩阵。

04 固定大小数组

若数组中括号内的整数大小被指定,则它是个固定大小数组。
例如声明2维,行和列都是10个项目的数组,就是个固定大小数组:

Dim sArray1(9, 9) As String

05 动态数组

若程序运行时数组的大小可以被改变,则它是个动态数组。
可以利用Static、Dim、Private或Public语句来声明数组,并使括号内为空。
每当需要时,可以使用ReDim语句去更改动态数组。然而当做这个动作时,数组中存在的值会丢失。若要保存数组中原先的值,则可以使用ReDim Preserve语句来扩充数组。例如,下列的语句将varArray数组扩充了6个项目,而原本数组中的项目数值并没有被冲消。



ReDim sArray(UBound(sArray) + 6) As String

当对动态数组使用Preserve关键字时,只可以扩大最后维数的项目数量,而不能改变维数的数目。完整示例如下:

Sub Sample232()
Dim sArray() As String '定义动态数组
ReDim sArray(3) As String '第一次定义动态数组的项目数
sArray(1) = "女"
sArray(2) = "北京市朝阳区"
sArray(3) = "大学本科"
'第二次定义动态数组的项目数,保留数组中原有项目的数值
ReDim Preserve sArray(UBound(sArray) + 1) As String
MsgBox sArray(1)
'第三次定义动态数组的项目数,保留数组中原有项目的数值
ReDim sArray(UBound(sArray) + 6) As String
MsgBox sArray(1)
End Sub