2012-02-07 99 views
12

我试图定义自己的数据类型并将其作为值放入字典中。 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 

这是错误的messge:公共对象模块中定义

只有用户定义类型可以强制转换或从一种变型,或者传递给后期绑定模块。

+0

什么信息? – BNL 2012-02-07 14:41:04

+0

只有在公共对象模块中定义的用户定义类型可以强制到变体或从变体强制传递或传递到延迟绑定的模块。 – 2012-02-07 15:04:37

+0

如果将行更改为“resource.Add key,trx.french”,那么它会编译,但我不能'告诉你的目标是什么。 “bla”=“add”吗? – 2012-02-07 15:05:48

回答

11

后一些更多的挖我发现这个答案:

如果你想要把一个用户定义的数据类型为集合的词典,你必须把它定义为类。您可以通过添加一个新的类模块和刚刚添加该代码这样做:

Public german As String 
Public french As String 
Public italian As String 

因为我命名类模块反式,我得到的代码如下所示:

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 

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

+1

谢谢。这是非常愚蠢的,适用于返回用户定义的类型/类的数组... – enderland 2014-01-23 22:29:52

+4

我离开VBA,我永远发誓它。我回来,涉猎。我忘了自己,然后回到......直到失望再次袭击了我......随身携带是第二次被愚弄的耻辱。简明的问答。 – colemand77 2016-12-27 01:15:32

相关问题