programing

VBA에서 사전을 매개 변수로 통과하려면 어떻게 해야 합니까?

i4 2023. 9. 8. 21:10
반응형

VBA에서 사전을 매개 변수로 통과하려면 어떻게 해야 합니까?

사전 개체를 다른 함수로 전달하려면 어떻게 해야 합니까?아래 코드:

Sub aaa(dict As Object)
Set dict = CreateObject("Scripting.Dictionary")
...
process dict 
End Sub

Sub process(dict As Scripting.Dictionary)
    MsgBox dict.Count
End Sub

컴파일 오류 "User defined type not defined"를 제공합니다.


또한.

Set dict = CreateObject("Scripting.Dictionary")

효과는 있지만,

Dim dict As New Scripting.Dictionary 

"User defined type not defined"를 제공합니다.

엑셀 2010을 사용하고 있습니다.

사용할때CreateObject런타임에 개체를 바인딩합니다(즉, 지연 바인딩).사용할때As Scripting.Dictionary개체는 컴파일 타임에 바인딩됩니다(즉, 조기 바인딩).

초기 바인딩을 수행하려면 올바른 라이브러리에 대한 참조를 설정해야 합니다.이 작업을 수행하려면 도구 --> 참조...로 이동합니다."Microsoft Scripting Runtime"을 선택합니다.

오류를 방지하려면 Microsoft Scripting Runtime(도구 -> 참조)을 추가합니다.
단순화된 예:

Sub test_dict()
    Dim dict As New Scripting.Dictionary
    Call process(dict)
End Sub

Sub process_dict(dict As Scripting.Dictionary)
    MsgBox dict.Count
End Sub

late binding만 사용하도록 이 답변을 수정하고 object parameter를 사용합니다.

Sub aaa(dict As Object)
Set dict = CreateObject("Scripting.Dictionary")
...
process dict 
End Sub

Sub process(dict As Object)
    MsgBox dict.Count
End Sub

매크로에서 유형을 인식하려면 Microsoft Scripting Runtime 라이브러리에 참조를 추가해야 합니다.도구로 이동 ->참고 자료를 참조하고 Microsoft Scripting Runtime을 확인합니다.

"도구->참고문헌->Microsoft Scripting Runtime"을 추가한 후 다음 작업을 시도하십시오.

Private Sub CommandButton1_Click()

    Dim myLocalDictionary As New Dictionary
    myLocalDictionary.Add "a", "aaa"
    myLocalDictionary.Add "b", "bbb"
    myLocalDictionary.Add "c", "ccc"

    Call testPassDictionary(myLocalDictionary)

End Sub

Sub testPassDictionary(myDictionary As Dictionary)
    MsgBox myDictionary.Count
End Sub

언급URL : https://stackoverflow.com/questions/9401378/how-can-i-pass-a-dictionary-as-a-parameter-in-vba

반응형