通过vba字典

新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 

给出了一个编译错误:用户定义的types没有定义


也,

 Set dict = CreateObject("Scripting.Dictionary") 

作品,但是

 Dim dict As New Scripting.Dictionary 

给出“用户定义types未定义”

我使用Excel 2010

当您使用CreateObject您在运行时绑定对象(即,后期绑定)。 当你使用As Scripting.Dictionary ,对象在编译时绑定(即,早期绑定)。

如果你想做早期的绑定,你需要设置一个对正确的库的引用。 为此,请转至工具 – >参考…并select“Microsoft脚本运行时”

为了避免错误,请添加Microsoft脚本运行时(在工具 – >引用中)。
简单的例子:

 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 

您需要添加对Microsoft脚本运行时库的引用,以使您的macros能够识别这些types。 转到工具 – >引用并检查Microsoft脚本运行时。

我会修改这个答案只使用后期绑定,并使用一个对象参数:

 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脚本运行时”后,试试这个

 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