返回列表 上一主題 發帖

[分享] 使用API取得陣列維度

閔大版主你好:

   小弟前日在EXCEL VBA發問一則
有關如何得知陣列維數。已承蒙HSIEH版主
大大解惑。同時也告知小弟另有閔大版主的API函數
功能也能得到相同結果。
    小弟也發費多日但仍無法引用版主大大此例如何
改成EXCEL VBA的方式而能得到版主大大所設定的功能。
是否能請版主大大解惑呢?
下列VBA語法為HSIEH版主大大提供如下
Function checkarray(mArray As Variant)
Dim i%, n%
i = 1
On Error Resume Next
Do Until Err.Number = 9   
    n = LBound(mArray, i)   
    If Err.Number = 0 Then i = i + 1   
Loop
    checkarray = i - 1   
End Function

感恩版主大大!

TOP

本帖最後由 dechiuan999 於 2011-2-1 11:01 編輯

謝謝版主大大。
小弟揣摩版主大大的範例,
並修改實際例子之後;
卻出現陣列形態不符。
盼版主大大能再指點迷津。
另小弟有一疑惑,如果小弟想多了解
API函數的應用領域,不知如何著手呢?
Sub aa()   
    Dim ar1, ar2, ar3
    Dim mData()
    Dim s%, s1%, n1%, n2%, m%
    Dim mSht1 As Worksheet
    Dim mSht2 As Worksheet
    Dim ar As Variant
    Dim lpArray As Long
    Dim lDim As Long
   
    Set mSht1 = Worksheets(1)      
    With mSht1
        ar1 = .Range("a1:c5")  '二維陣列
        ar2 = .Range("e8:g8")
       ar2 = Application.Transpose(Application.Transpose(ar2))  '二維陣列轉成一維陣列
        ar3 = .Range("h10:j14")  '二維陣列        
      
        ReDim Preserve mData(0)
        mData(0) = ar1
        ReDim Preserve mData(1)
        mData(1) = ar2
        ReDim Preserve mData(2)
        mData(2) = ar3
        
        s = UBound(mData)
        For s1 = 0 To UBound(mData)
        ar = mData(s1)          '如何判斷ar 是一維陣列或是二維陣列呢?
         
         Call CopyMemory(lpArray, ByVal ArrayPtr(ar), 4)   '執行至此出現AR形態不符
       Call CopyMemory(lDim, ByVal lpArray, 2)
        Debug.Print "維數   =   "; lDim
        Next
        
    End With
            
End Sub

感恩版主大大。

arrTest2.rar (9.33 KB)

TOP

謝謝二位版主大大。

小弟已測試成功。
感恩大大!

TOP

        靜思自在 : 能幹不幹,不如苦幹實幹。
返回列表 上一主題