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

+0

パブリックオブジェクトモジュールで定義されたユーザー定義型のみが、バリアントとの間で強制的に継承されるか、遅延バインディングされたモジュールに渡されます。 –

+0

この行を "resource.Add key、trx.french"に変更するとコンパイルされますが、目標が何であるかはわかりません。 "bla" = "add"ですか? –

答えて

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

+4

私はVBAから離れ、永遠にそれを誓います。私は戻って、おしゃべりしています。私は自分自身を忘れて、そして、再び失望が私の上で新たに洗うまで...。それを持って運ぶことは、もう一度だまされたのは残念です。簡潔なQ&A。 – colemand77