Private Sub Command1_Click()
    Dim tinfo() As Integer, i As Integer
    Dim arr(3, 2) As Integer '要判断的数组
    ArrayInfo arr, tinfo
    MsgBox "维数=" & tinfo(0)
    For i = 1 To tinfo(0)
        MsgBox "第" & i & "维:" & tinfo(i)
    Next i
End Sub
Private Sub ArrayInfo(ByVal arr As Variant, ByRef tinfo() As Integer)
    Dim i As Integer, ct As Integer
    On Error GoTo jmp
    ct = 1
    Do
        i = UBound(arr, ct)
        ct = ct + 1
    Loop
    jmp:
    ReDim tinfo(ct - 1)
    tinfo(0) = ct - 1
    For i = 1 To ct - 1
        tinfo(i) = UBound(arr, i)
    Next i
End Sub假定数组都以0为下标,只得出ubound,自己改改就ok了

解决方案 »

  1.   

    用以下的代码可以实现你想要的功能:
    Dim ltemp As Long
    Dim I As Long
    Dim ndims As Long
    On Error GoTo Errhadle
        For I = 1 To 1000     '不会有这么多维数的数组
            ltemp = UBound(MyArr, I)        '其中MyArr为你要查询维数的数组
        Next
    Errhadle:
        ndims = I - 1
        MsgBox "这个数组有" & ndims & "维"看看现在是否已经实现了你想要的功能了呢?
    see it?
      

  2.   


    TO: winnerwang(彷徨) 
    你的一看便知是可行的是不是没这类函数,需自个儿编?
      

  3.   

    是的!
    没有那样的函数
    http://www.csdn.net/develop/read_article.asp?id=12902
        先来看看从这个上面我们能做些什么,比如要得到一个数组的维数,在VB里没有直接提供这样的方法,有一个变通的方法是通过错误捕获如下:
        On Error Goto BoundsError
        For I = 1 To 1000     '不会有这么多维数的数组 
            lTemp = LBound(MyArr, I)
        Next
    BoundErro:
        nDims = I - 1
        MsgBox "这个数组有" & nDims & "维"    现在我们知道了SafeArray的原理,所以也可以直接得到维数,如下:
        '先得到一个指向SafeArray结构的指针的指针,原理是什么,我后面说。
        ppMyArr = VarPtrArray(MyArr)
        '从这个指针的指针得到SafeArray结构的指针
        CopyMemory pMyArr, ByVal ppMyArr, 4
        '再从这个指针所指地址的头两个字节取出cDims 
        CopyMemory nDims, ByVal pMyArr, 2
        MsgBox "这个数组有" & nDims & "维"