这两种方式,在只有一个 dict 对象时,是等价的。但如果要构造多个 dict 对象,譬如在循环中构造字典对象并用这些对象组装数组时,就要使用第二种方式:只声明一个字典类型的变量,但使用 Set … New Dictionary 语句生成多个字典对象。我们把这种引用 Microsoft Scripting Runtime 然后在类型声明中使用 Dictionary 作为类型的做法叫做早绑定(early binding)。早绑定的好处是,VBA 在编译阶段就知道 dict 的具体类型,这有利于类型检查,并且执行效率也要高一些。与之相反的,称为晚绑定(late binding),即不引用 Microsoft Scripting Runtime,而是通过 CreateObject 引入 Scripting.Dictionary:
Dim dict As ObjectDim k As VariantSet dict = CreateObject("Scripting.Dictionary")dict.Add "Name", "Musk"dict("Title") = "Tesla CEO"ForEach k in dict.Keys Debug.Print k & " => " & dict(k)Next kDebug.Print TypeName(dict) ' DictionaryDebug.Print VarType(dict) ' 9=> vbObject
#Const EarlyBinding = 1 ' 若使用晚绑定,则 0...#If EarlyBinding = 1 Then Dim dict As New Scripting.Dictionary#Else Dim dict As ObjectSetDict = CreateObject("Scripting.Dictionary")#End Ifdict.Add "Name", "Musk"...