VBA字典數組轉置維度變化

字典是VBA中經常使用的對象,有時需要將字典對象中保存數據轉爲數組,然後做進一步處理,在使用過程中經常會遇到數組下標越界之類的問題,下面就講講字典到數組的轉換。
示例代碼如下:

Sub Demo()
    Dim arr1, arr2, arr3
    Set objDic = CreateObject("Scripting.Dictionary")
    For i = 1 To 5
        objDic(i) = i
    Next i
    Debug.Print "> items直接賦值給數組:"
    arr1 = objDic.items
    Call GetArrBound(arr1)
    Debug.Print "> 數組第一次轉置:"
    arr2 = Application.Transpose(arr1)
    Call GetArrBound(arr2)
    Debug.Print "> 數組第二次轉置:"
    arr3 = Application.Transpose(arr2)
    Call GetArrBound(arr3)
    Set objDic = Nothing
End Sub
Sub GetArrBound(arr)
    Dim intArrDim As Integer, n
    intArrDim = fnGetArrayDimension(arr)
    Debug.Print ">>數組維度:" & intArrDim
    For n = 1 To intArrDim
        Debug.Print ">>>" & n & "維下界:" & LBound(arr, n) & ", 上界:" & UBound(arr, n)
    Next
    Debug.Print Application.Rept("=", 20)
End Sub
Function fnGetArrayDimension(arr) As Integer
    Dim tmp, i
    On Error Resume Next
    For i = 1 To 60
        Err.Clear
        tmp = UBound(arr, i)
        If Err.Number = 9 Then
            fnGetArrayDimension = i - 1
            Exit Function
        End If
    Next i
End Function

運行Demo過程立即窗口中的輸出如下:
在這裏插入圖片描述
本地窗口中如下圖所示。
在這裏插入圖片描述
【代碼解析】
第3行代碼聲明創建一個字典對象。
第4~6行代碼爲字典對象賦值,共有5個元素。
第8行代碼將自動對象的items集合賦值給arr1,有立即窗口中可以看到arr1是一維數組,其下標爲0至4,對應立即窗口的輸出如下。

> items直接賦值給數組:
>>數組維度:1
>>>1維下界:0, 上界:4

第11行代碼將數組進行一次轉置,此時生成的數組arr2變爲二維數組,對應立即窗口的輸出如下。

> 數組第一次轉置:
>>數組維度:2
>>>1維下界:1, 上界:5
>>>2維下界:1, 上界:1

第14行代碼將數組再進行一次轉置,此時生成的數組arr3爲一維數組,對應立即窗口的輸出如下。雖然經過兩次轉置,數組變回一維數組,但是數組的下屆和上界都發生了變化,在代碼中引用數組時需要注意下標的範圍。

> 數組第二次轉置:
>>數組維度:1
>>>1維下界:1, 上界:5

第18~26行代碼爲GetArrBound過程用於獲取並輸出數組每個維度的上界和下屆。
第18~26行代碼爲fnGetArrayDimension過程用於獲取數組知維度數量,代碼詳細講解參見《[如何獲取數組的維數](https://blog.csdn.net/taller_2000/article/details/84868857)》

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章