分享

【烟花原创】VBA零基础之第113篇 VBA数组(三)

 vba技术学习 2018-07-15
调整动态数组的大小:

A不保留数组原有值调整大小
方法:Redim 数组名(数组大小说明) [ as 类型]
数组大小说明,主要是指明数组是几维,每一维的上下标值。
例如 redim arr(1 to 5,2),指明调整大小数组为2维,第1维的下标从15,第2维的上标为2,下标由于省略,受option base决定。
在过程级别中使用,用于为动态数组变量重新分配存储空间。
用来定义或重定义PrivatePublicDim声明过的动态数组的大小。
示例:
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数组是103列(延用单元格的说法,易于理解),当保留值重新定义后,效果如下图,注意观察本地窗口:

数组调整成为
102列,原有在102列中的值全保留下来了。

当数组扩大时,可以理解成为再最后一维上再添加一些存储空间,新添加的空间基本为空。
当数组缩小时,相当于在最后一维上切掉一些存储空间,没有切掉的值就保留了下来。

执行下列语句都会产生错误:
1.redim preserve arr(1 to 10, 3)
Arr赋值后是103列,这个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)
保留原有值调整大小时,数组的维数不能变,产生下标越界错误。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多