vba 代码中有二维动态数组S,第1次重定义为50行,但由于只用到j行

j<50,怎样保留数组中前j行的数据重定义该二维数组为j行。

你第一次重定义的时候,一定要把可变的维数定义在最后一维,比如
ReDim s(1 To 2, 1 To 50)
然后第二次重定义的时候就可以
Redim Preserve s(1 To 2, 1 To j)

强调:重定义动态数组时,要想保持数组中原有的数据,只能修改最后一维的维数!
温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-10-11
说明

ReDim 语句用来定义或重定义原来已经用带空圆括号(没有维数下标)的
Private、Public 或 Dim 语句声明过的动态数组的大小。

可以使用 ReDim 语句反复地改变数组的元素以及维数的数目,但是不能在将一个数组定义为某种数据类型之后,再使用
ReDim 将该数组改为其它数据类型,除非是 Variant 所包含的数组。如果该数组确实是包含在某个 Variant
中,且没有使用 Preserve 关键字,则可以使用 As type
子句来改变其元素的类型,但在使用了此关键字的情况下,是不允许改变任何数据类型的。

如果使用了 Preserve
关键字,就只能重定义数组最末维的大小,且根本不能改变维数的数目。例如,如果数组就是一维的,则可以重定义该维的大小,因为它是最末维,也是仅有的一维。不过,如果数组是二维或更多维时,则只有改变其最末维才能同时仍保留数组中的内容。下面的示例介绍了如何在为已有的动态数组增加其最末维大小的同时而不清除其中所含的任何数据。
ReDim X(10, 10, 10)
. . .
ReDim Preserve X(10, 10, 15)

同样地,在使用 Preserve 时,只能通过改变上界来改变数组的大小;改变下界则会导致错误。

如果将数组改小,则被删除的元素中的数据就会丢失。如果按地址将数组传递给某个过程,那么不要在该过程内重定义该数组的各维的大小。

------------------------------------
ReDim 语句示例

该示例使用 ReDim 语句为动态数组变量分配和重分配存储空间。假设 Option Base 是
1。
Dim MyArray() As Integer '声明动态数组。
Redim MyArray(5) '分配 5 个元素。
For I = 1 To 5 '循环 5 次。
MyArray(I) = I '初始化数组。
Next I

下一条语句重定义该数组的大小,并清除其中的元素。
Redim MyArray(10) '大小重定为 10 个元素。
For I = 1 To 10 '循环 10 次。
MyArray(I) = I '初始化数组。
Next I

下面的语句重定义该数组的大小,但没有清除其中的元素。
Redim Preserve MyArray(15) '大小重定为 15 个元素。追问

关键是ReDim Preserve S(......后面怎么写?我在全网都没有找到正确答案,所以在此请高手解难。

追答

写数字呗, 新数组需要几个就写几
Redim Preserve MyArray(50)

第2个回答  2013-10-11
在前面加上
Redim Preserve追问

ReDim Preserve S(......后面怎么写?ReDim Preserve S(1 To j,1 To 2)是肯定不行的。

追答

ReDim Preserve S(1 To j,1 To 2) 这样行的
但是ReDim 语句通常用于指定或修改动态数组的大小
也就是说你的s在最开始只能s()
把能在最开始就制定数组下标

Dim a()
ReDim Preserve a(1 To 3)
a(1) = Text1.Text
a(2) = Text2.Text
a(3) = Text3.Text

ReDim Preserve a(1 To 4)

Text1.Text = a(3)
Text2.Text = a(2)
Text3.Text = a(1)

相似回答