如何将用户定义的数据类型放入Dictionary中

Bet*_*ide 13 excel vba excel-2010

我正在尝试定义自己的数据类型并将其作为值放在Dictionary中.VBA抱怨它不接受我的数据类型.关于如何使这个工作的任何想法?

Option Explicit

Public Type Translation
    german As String
    french As String
    italian As String
End Type

Private resource As Object

Public Sub addTranslation(key As String, g As String, f As String, i As String)
    Dim trx As Translation
    trx.german = g
    trx.french = f
    trx.italian = i

    resource.add key, trx  '<== here VBA is complaining
End Sub

Public Sub initResource()
    If resource Is Nothing Then Set resource = CreateObject("scripting.dictionary")
End Sub
Run Code Online (Sandbox Code Playgroud)

这是错误消息:

只有在公共对象模块中定义的用户定义类型才能被强制转换为变体或从变量强制转移或传递给后期绑定模块.

Bet*_*ide 14

经过一番挖掘,我发现了这个答案:

如果要将用户定义的数据类型放入Collection of Dictionary,则必须将其定义为类.您可以通过添加新的类模块并添加以下代码来实现:

Public german As String
Public french As String
Public italian As String
Run Code Online (Sandbox Code Playgroud)

由于我将类模块命名为trans,因此生成的代码如下所示:

Private resource As Object

Public Sub addTranslation(k As String, g As String, f As String, i As String)
    Dim trx As trans
    Set trx = New trans
    trx.german = g
    trx.french = f
    trx.italian = i

    resource.Add k, trx
End Sub

Public Sub initTranslations()
    If resource Is Nothing Then Set resource = CreateObject("scripting.dictionary")
End Sub
Run Code Online (Sandbox Code Playgroud)

现在我可以动态添加翻译.

  • 我离开VBA,我永远发誓.我回来了,涉水.我忘记了自己,然后又回过头来......直到我失望地再次为我洗漱......扛着它是第二次被愚弄的耻辱.简明的问答. (6认同)