VBA字典数组转置维度变化

52 篇文章 4 订阅
16 篇文章 3 订阅

字典是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)》

  • 0
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值