调整动态数组的大小: A不保留数组原有值调整大小 方法:Redim 数组名(数组大小说明) [ as 类型] 数组大小说明,主要是指明数组是几维,每一维的上下标值。 例如 redim arr(1 to 5,2),指明调整大小数组为2维,第1维的下标从1到5,第2维的上标为2,下标由于省略,受option base决定。 在过程级别中使用,用于为动态数组变量重新分配存储空间。 用来定义或重定义Private、Public或Dim声明过的动态数组的大小。 示例: Dim arr() Redim arr(1 to 3,1 to 4) Redim arr(1 to 1) Redim arr(1,2,3) 注意:但是不能在将一个数组定义为某种数据类型之后,再使用 ReDim 将该数组改为其它数据类型,除非是 Variant 所包含的数组。 正确的用法: Dim arr1 as variant Redim arr1(1,2) as string Redim arr1(-1 to 1,10 to 11) as long 可F8运行时注意本地窗口中arr1的变化,如下图: 声明大小后,可在本地窗口中展开数组变量名间的加号,一窍数组内部。 错误的用法,编译错误: B保留数组原有值调整大小 还是使用Redim 语句,但是需要加上Preserve关键字。 Redim preserve 数组名(数组大小说明) [as 类型] 数组大小说明,主要是指明数组是几维,每一维的上下标值。 注意:如果使用了 Preserve 关键字,就只能重定义数组最末维的大小,且根本不能改变维数的数目,而且修改上标值大小,下标值不能变。 示例1: 第一条赋值语句执行完后,arr数组是10行3列(延用单元格的说法,易于理解),当保留值重新定义后,效果如下图,注意观察本地窗口: 数组调整成为10行2列,原有在10行2列中的值全保留下来了。 当数组扩大时,可以理解成为再最后一维上再添加一些存储空间,新添加的空间基本为空。 当数组缩小时,相当于在最后一维上切掉一些存储空间,没有切掉的值就保留了下来。 执行下列语句都会产生错误: 1.redim preserve arr(1 to 10, 3) Arr赋值后是10行3列,这个reim语句最后一维由于省略了下标值,缺省为0,修改了下标值,相当于修改了下标值。 2. redim preserve arr(1 to 5,1 to 3) 保留原有值调整大小时,只能修改最后一维的大小,产生下标越界错误。3.redim preserve arr(1 to 10,1 to 3) as long 编译错误,不能修改变数组元素的数据类型。 4.redim preserve arr(1 to 10,1 to 3,1 to 4) 保留原有值调整大小时,数组的维数不能变,产生下标越界错误。
|
|