举个例子程序如下:运行时停在ReDim Preserve a(1, 2)这行,说下标越界,要是一维数组这样扩好象没问题,但不知这个问题出在哪里,怎么解决.
Private Sub Command1_Click()
Dim a() As StringReDim Preserve a(0, 2)
a(0, 0) = "fdf"
    
ReDim Preserve a(1, 2)
a(1, 0) = "fdfdf"
    
Text1.Text = a(0, 0)
Text2.Text = a(1, 0)
End Sub

解决方案 »

  1.   

    ReDim  a(i, j)
    之后
    只能改变j的值
      

  2.   

    哎,那就没有其他什么办法了吗,我必须得扩呀,要不先把a(i,j)中的i定义足够大,然后在需要的时候写入值,这样的话太浪费空间了,在程序里还得加代码看a(i,j)里是否有值.哪位高手有其他什么办法.我的程序里a(i,j)中的i是不定大小的,也许是0也许是1000.
      

  3.   

    用一个存储一维数组的一维数组,不就是二维数组了。而且这个二维数组是动态的。 ;)更改后你的代码:
    Private Sub Command1_Click()
        '存储一维数组的一维数组,相当于二维数组的第一个纬度值
        Dim a() As Variant
        Dim val() As String '做为值的一维数组
        
        ReDim Preserve a(1) As Variant '二维为1
        ReDim Preserve val(2) As String  '一维为2
        a(0) = val '设置二维值为一维
        a(0)(0) = "fdf" '设置值
        
        '重设二维为2
        ReDim Preserve a(2) As Variant
        a(1) = val '设置新增加的纬度值为一维
        a(1)(0) = "fdfdf"
            
        Text1.Text = a(0)(0)
        Text2.Text = a(1)(0)End Sub
      

  4.   

    java里的二维数组用的就是这个方法。
    这样一来二维数组不仅是矩形的,而且可以是三角形,菱形。
      

  5.   

    楼主快揭帖啊。 我要加入faq,把我的性欲分恢复到100~