2012-02-07 14 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

相關問題