【问题标题】:VBA dictionary data typeVBA 字典数据类型
【发布时间】:2015-06-17 16:59:46
【问题描述】:

许多来源,例如https://support.microsoft.com/en-us/kb/187234,声称字典的键可以是字符串以外的许多数据类型。但是,当我尝试将整数和日期作为键时,它失败了。谁能解释一下?

我尝试了下面@Tim Williams 的答案,它有效。我之前有的是

Private Sub trial()
Dim dict As New Dictionary

dt = 1
'vols.marketDate = Date
dict.Add dt, 4 'vols
c = dict(dt)
End Sub

与@Tim Williams 相比,我定义字典的方式有区别吗?


我的问题的第二部分与字典的值有关。我运行以下 VBA 代码,尝试使用用户定义的结构作为字典的值,并遇到错误消息:

Public Type volSurface
    marketDate As Date
End Type


Private Sub trial()
Dim dict As New Dictionary, vols As volSurface

dt = 1
vol.marketDate = Date
dict.Add dt, vols
c = dict(dt)
End Sub

这是否意味着我不能将结构用作字典中的值,或者我做错了什么?如果是后一种情况,我该如何补救?

【问题讨论】:

    标签: excel dictionary key vba


    【解决方案1】:

    这里没问题:

    Sub Tester()
    
        Dim d, k
        Set d = CreateObject("scripting.dictionary")
        d.Add 1, 1
        d.Add "a", 2
        d.Add #1/2/1978#, 3
        d.Add CDbl(66), 4
        d.Add CSng(99), 5
        d.Add True, 6
    
        For Each k In d.keys
            Debug.Print TypeName(k), k, d(k)
        Next k
    
    End Sub
    

    输出:

    Integer        1             1 
    String        a              2 
    Date          1/2/1978       3 
    Double         66            4 
    Single         99            5 
    Boolean       True           6 
    

    如果您遇到问题的特定代码,请将其添加到您的问题中。

    【讨论】:

    • 我试过你的样品。有用。我刚刚在问题中添加了我的原始代码。请你看一下我声明字典的方式好吗?有效吗?
    • 谢谢@Tim Williams。这很奇怪,它以前不起作用......我添加了一个相关的第二个问题,关于字典值的数据类型。你介意看看这个问题吗?
    • 使用类而不是类型。
    猜你喜欢
    • 2021-08-29
    • 1970-01-01
    • 2010-10-06
    • 1970-01-01
    • 2021-02-03
    • 1970-01-01
    • 1970-01-01
    • 2015-08-27
    • 2019-05-28
    相关资源
    最近更新 更多