VBA字典数组转置维度变化
发布日期:2021-05-06 08:33:48 浏览次数:23 分类:精选文章

本文共 1681 字,大约阅读时间需要 5 分钟。

字典是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 = NothingEnd SubSub 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 SubFunction 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 iEnd 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)》

上一篇:VBA数组赋值(1/2)-- 一维数组
下一篇:VBA之正则表达式(19)-- 相对引用转绝对引用

发表评论

最新留言

留言是一种美德,欢迎回访!
[***.207.175.100]2025年04月11日 22时38分21秒