2

辞書をパラメータとして渡したい。私のコードは少し奇妙に見えるかもしれませんが、とにかくそれを示します:

Sub get_Insurers_Dictionary()

Dim cInsurers               As c_Insurers
Dim myDictionary            As Scripting.Dictionary

Set cInsurers = New c_Insurers

Set myDictionary = New Scripting.Dictionary
Set myDictionary = cInsurers.Get_Parameters_Dictionary(cInsurers, myDictionary)

End Sub

次に、c_Insurersクラスで:

Public Function Get_Parameters_Dictionary(cInsurers As c_Insurers, myDictionary As Dictionary) As Dictionary

Dim oSheet                      As Excel.Worksheet
Dim cParameters                 As c_Parameters


Set oSheet = ThisWorkbook.Sheets("Parameters_Insurers")
oSheet.Activate

Set cParameters = New c_Parameters
Set cParameters = cParameters.Get_Parameters(cParameters, oSheet)

Me.fPartner_ID_Col = cParameters.get_Header_Cols(oSheet, cParameters.fMax_Col, "INSURER_ID")
Me.fPartner_Name_Col = cParameters.get_Header_Cols(oSheet, cParameters.fMax_Col, "INSURER_NAME")
Me.fCountry_Col = cParameters.get_Header_Cols(oSheet, cParameters.fMax_Col, "COUNTRY")

For lcnt = 1 To UBound(cParameters.fArray)
    myDictionary.Add cParameters.fArray(lcnt, Me.fPartner_ID_Col), Me.Get_Parameters_Class(cInsurers, cParameters, lcnt)
Next lcnt

Set Get_Parameters_Insurers = myDictionary
Set cParameters = Nothing

End Function

一見複雑なコードを除けば、私の質問は単純です。クラスオブジェクトをアイテムとして追加することさえ可能ですか?(私はまだ辞書を扱うことに慣れていません)。私の辞書はc_insurersクラスに入力されていますが、get_Insurers_Dictionaryに戻ったときになぜ空になっているのですか?

4

1 に答える 1

1

辞書に好きなものを追加できます。辞書を渡すため、期待どおりに動作しませんがGet_Parameters_Dictionary、入力された後は返されません。代わりに、別の辞書に割り当てます。Set Get_Parameters_Insurers = myDictionary

これは、にSet myDictionary = cInsurers.Get_Parameters_Dictionary(cInsurers, myDictionary)リセットmyDictionaryされる Nothingことを意味します(割り当てられていないリターンタイプのため)。

あなたはSet Get_Parameters_Dictionary = myDictionaryGet_Parameters_Dictionary()または...気にしないでください。辞書は参照型なので、次のようになります。

Set myDictionary = New Scripting.Dictionary
cInsurers.Get_Parameters_Dictionary cInsurers, myDictionary

myDictionaryで行われた変更を反映しますGet_Parameters_Dictionary

于 2012-06-11T12:13:45.210 に答える