要用ubound得到数组的上界,再用for 做循环,如果把上界规定死了,就会得到很多空值。

解决方案 »

  1.   

    Dim ss() As String
        
        ReDim ss(30, 2) '为数组分配内存
        Erase ss '释放内存
      

  2.   

    VB可以动态定义数组
    Dim varTmp() As String
    ReDim [Preserve] varTmp(30, 2) '为数组分配内存 [Preserve]保存原数组内容
    Erase varTmp '释放内存
    '------------------------------------------
    MSDN 说明ReDim 语句用来定义或重定义原来已经用带空圆括号(没有维数下标)的 Private、Public 或 Dim 语句声明过的动态数组的大小。可以使用 ReDim 语句反复地改变数组的元素以及维数的数目,但是不能在将一个数组定义为某种数据类型之后,再使用 ReDim 将该数组改为其它数据类型,除非是 Variant 所包含的数组。如果该数组确实是包含在某个 Variant 中,且没有使用 Preserve 关键字,则可以使用 As type 子句来改变其元素的类型,但在使用了此关键字的情况下,是不允许改变任何数据类型的。如果使用了 Preserve 关键字,就只能重定义数组最末维的大小,且根本不能改变维数的数目。例如,如果数组就是一维的,则可以重定义该维的大小,因为它是最末维,也是仅有的一维。不过,如果数组是二维或更多维时,则只有改变其最末维才能同时仍保留数组中的内容。下面的示例介绍了如何在为已有的动态数组增加其最末维大小的同时而不清除其中所含的任何数据。
      

  3.   

    如果使用了 Preserve 关键字,就只能重定义数组最末维的大小,且根本不能改变维数的数目。例如,如果数组就是一维的,则可以重定义该维的大小,因为它是最末维,也是仅有的一维。不过,如果数组是二维或更多维时,则只有改变其最末维才能同时仍保留数组中的内容。下面的示例介绍了如何在为已有的动态数组增加其最末维大小的同时而不清除其中所含的任何数据。ReDim X(10, 10, 10)
    . . .
    ReDim Preserve X(10, 10, 15)同样地,在使用 Preserve 时,只能通过改变上界来改变数组的大小;改变下界则会导致错误。如果将数组改小,则被删除的元素中的数据就会丢失。如果按地址将数组传递给某个过程,那么不要在该过程内重定义该数组的各维的大小。Private Sub Command1_Click()
        Dim a() As String, i As Long
        
        For i = 1 To 5
        
        ReDim Preserve a(2, i) '重新定义第二维
        a(2, i) = i * 2
        Next
        
        For i = 1 To 5
            Debug.Print a(2, i) '效果验证
        Next
    End Sub