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)》

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