VBA数组使用方法[多图]

1、声明数组 。
数组的声明方式和其它的变量是一样的, 它可以使用Dim、Static、Private 或 Public 语句来声明 。 标量变量(非数组)与数组变量的不同在于通常必须指定数组的大小 。 若数组的大小被指定的话, 则它是个固定大小数组 。 若程序运行时数组的大小可以被改变, 则它是个动态数组 。
数组是否从0 或1 索引是根据Option Base 语句的设置 。 如果Option Base 没有指定为 1, 则数组索引从零开始 。
(1)声明固定大小的数组
下面这行代码声明了一个固定大小的数组, 它是个 11 行乘以 11 列的 Integer 数组:
Dim MyArray(10, 10) As Integer
(2)声明动态数组
若声明为动态数组, 则可以在执行代码时去改变数组大小 。 可以利用 Static、Dim、Private 或 Public 语句来声明数组, 并使括号内为为空, 如下示例所示 。
Dim sngArray() As Single
2、获得数组的最大与最小下标 。 利用LBound 函数与UBound 函数函数可以分别来获得数组的最小与最大下标, 其语法是:
LBound(arrayname[, dimension])
UBound(arrayname[, dimension])
语法包含下面部分:
部分 描述
arrayname 必需的 。 数组变量的名称, 遵循标准的变量命名约定 。
dimension 可选的;Variant (Long) 。 指定返回哪一维的下界 。 1 表示第一维, 2 表示第二维, 如此类推 。 如果省略dimension, 就认为是 1 。
3、ReDim 语句 。 ReDim 语句用来定义或重定义原来已经用带空圆括号(没有维数下标)的 Private、Public 或 Dim 语句声明过的动态数组的大小, 其语法是:
ReDim [Preserve] varname(subscripts) [As type] [, varname(subscripts) [As type]] . . .
ReDim 语句的语法包括以下几个部分:
部分 描述
Preserve 可选的 。 关键字, 当改变原有数组最末维的大小时, 使用此关键字可以保持数组中原来的数据 。
varname 必需的 。 变量的名称;遵循标准的变量命名约定 。
subscripts 必需的 。 数组变量的维数;最多可以定义 60 维的多维数组 。 subscripts 参数使用下面的语法:
[lower To] upper [,[lower To] upper] . . .
如果不显式指定lower, 则数组的下界由Option Base 语句控制 。 如果没有Option Base 语句则下界为 0 。
type 可选的 。 变量的数据类型;可以是 Byte、Boolean、Integer、Long、Currency、Single、Double、Decimal(目前尚不支持)、Date、String(对变长的字符串)、String * length(对定长的字符串)、Object、Variant、用户定义类型或对象类型 。 所声明的每个变量都要有一个单独的 As type 子句 。 对于包含数组的 Variant 而言, type 描述的是该数组的每个元素的类型, 不能将此 Variant 改为其它类型 。
可以使用 ReDim 语句反复地改变数组的元素以及维数的数目, 但是不能在将一个数组定义为某种数据类型之后, 再使用ReDim 将该数组改为其它数据类型, 除非是 Variant 所包含的数组 。 如果该数组确实是包含在某个Variant 中, 且没有使用Preserve 关键字, 则可以使用As type 子句来改变其元素的类型, 但在使用了此关键字的情况下, 是不允许改变任何数据类型的 。
【VBA数组使用方法[多图]】如果使用了Preserve关键字, 就只能重定义数组最末维的大小, 且根本不能改变维数的数目 。 例如, 如果数组就是一维的, 则可以重定义该维的大小, 因为它是最末维, 也是仅有的一维 。 不过, 如果数组是二维或更多维时, 则只有改变其最末维才能同时仍保留数组中的内容 。

    推荐阅读