下面这几行代码报错,为什么,有替代办法吗?

blp 2002-02-05 05:14:19
Private Sub Form_Load()
Dim a
Dim i As Long
ReDim a(0, 14)
For i = 1 To 14
a(0, i) = i
Next i
ReDim Preserve a(1, 14)
For i = 1 To 14
a(1, i) = i
Next i
End Sub
...全文
96 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
idoloveyou 2002-02-05
  • 打赏
  • 举报
回复
会!
所以应该把dim a 改成dim a()
cnthinking 2002-02-05
  • 打赏
  • 举报
回复
用preserve 关键字是为了保留数组中原来的数据,
对于多维数组只能重定义最后一维!
默认情况下,数组的下界从0开始
jett 2002-02-05
  • 打赏
  • 举报
回复
说明

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

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

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

ReDim X(10, 10, 10)
. . .
ReDim Preserve X(10, 10, 15)

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

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

在初始化变量时,数值变量被初始化为 0,变长的字符串被初始化为一个零长度的字符串 (""),而定长的字符串则用 0 填充。Variant 变量被初始化为 Empty。用户自定义类型的变量的每个元素作为各自独立的变量进行初始化。在使用引用对象的变量之前,必须使用 Set 语句将一个已有的对象赋给该变量。在被赋值之前,所声明的对象变量有一个特定值 Nothing,这个值表示该变量没有指向任何对象的实例。

小心 如果 ReDim 语句所使用的变量在模块级别或过程级别不存在,则该语句就相当于一个声明语句。如果此后在一个更广的范围内又创建了同名的变量,即使使用了 Option Explicit,ReDim 也将使用后声明的这个变量,且不会导致编译错误。为了避免这种冲突,就不应把 ReDim 作为声明语句使用,而只应作为重定义数组大小的语句。

注意 要改变 Variant 所包含的数组的大小,必须在试图改变其数组大小之前显式声明该 Variant 变量。
blp 2002-02-05
  • 打赏
  • 举报
回复
Preserve去掉后会不会影响数组的内容?
cnthinking 2002-02-05
  • 打赏
  • 举报
回复
Private Sub Form_Load()
Dim a()
Dim i As Long
ReDim a(14, 0)
For i = 0 To 14
a(i, 0) = i
Next i
ReDim Preserve a(14, 1)
For i = 0 To 14
a(i, 1) = i
Next i
End Sub
blp 2002-02-05
  • 打赏
  • 举报
回复
uguess(uguess) :
你的不行,其他在试。
uguess 2002-02-05
  • 打赏
  • 举报
回复
ReDim Preserve a(1, 14)中的Preserve去掉
uguess 2002-02-05
  • 打赏
  • 举报
回复
Private Sub Form_Load()
Dim a()
Dim i As Long
ReDim a(1, 14)
For i = 1 To 14
a(0, i) = i
Next i
For i = 1 To 14
a(1, i) = i
Next i
End Sub
lily0000000 2002-02-05
  • 打赏
  • 举报
回复
ReDim Preserve a(1, 14)中的Preserve去掉
zyl910 2002-02-05
  • 打赏
  • 举报
回复
Private Sub Form_Load()
Dim a() As Long
Dim i As Long
ReDim a(0 To 0,1 To 14)
For i = 1 To 14
a(0, i) = i
Next i
ReDim Preserve a(1 To 1,1 To 14)
For i = 1 To 14
a(1, i) = i
Next i
End Sub
uguess 2002-02-05
  • 打赏
  • 举报
回复
Private Sub Form_Load()
Dim a()
Dim i As Long
ReDim a(0, 14)
For i = 1 To 14
a(0, i) = i
Next i
ReDim Preserve a(1, 14)
For i = 1 To 14
a(1, i) = i
Next i
End Sub

7,762

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧