Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 4350|回复: 4

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

[复制链接]
发表于 2014-3-2 16:12 | 显示全部楼层 |阅读模式
本帖最后由 hwc2ycy 于 2014-3-2 16:13 编辑

调整动态数组的大小:

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的变化,如下图:
1.jpg

声明大小后,可在本地窗口中展开数组变量名间的加号,一窍数组内部。

错误的用法,编译错误:
2.jpg

B保留数组原有值调整大小
还是使用Redim 语句,但是需要加上Preserve关键字。
Redim preserve 数组名(数组大小说明) [as 类型]
数组大小说明,主要是指明数组是几维,每一维的上下标值。
注意:如果使用了 Preserve 关键字,就只能重定义数组最末维的大小,且根本不能改变维数的数目,而且修改上标值大小,下标值不能变。
示例1
3.jpg
第一条赋值语句执行完后,arr数组是103列(延用单元格的说法,易于理解),当保留值重新定义后,效果如下图,注意观察本地窗口:
4.jpg
数组调整成为
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)
保留原有值调整大小时,数组的维数不能变,产生下标越界错误。

评分

参与人数 1 +21 收起 理由
我心飞翔410 + 21 很给力!

查看全部评分

发表于 2014-3-2 16:22 | 显示全部楼层
回复

使用道具 举报

发表于 2014-3-2 16:41 | 显示全部楼层
回复

使用道具 举报

发表于 2014-3-30 10:09 | 显示全部楼层
学习动态数组大小调整的方法
特别注意:如果使用了 Preserve 关键字,就只能重定义数组最末维的大小,且根本不能改变维数的数目,而且修改上标值大小,下标值不能变。
回复

使用道具 举报

发表于 2014-6-18 13:49 | 显示全部楼层
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-5-2 09:03 , Processed in 0.129719 second(s), 11 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表