声明没有Microsoft Scripting Runtime的字典

时间:2014-10-27 07:10:38

标签: excel vba dictionary

我有一个主要的Excel VBA程序,它使用后期绑定调用Sub Routine,因为使用Tools-> References->由于已知原因,Microsoft Scripting Runtime不可行。

Main Program    
Dim Dict As Object
Set Dict = CreateObject("Scripting.Dictionary")
Call SubRoutine(Dict)

下一步是将字典发送到我的SubRoutine

Public Sub SubRoutine(Dict As Scripting.Dictionary)
do something
end

将导致编译错误,这是因为我没有对Microsoft Scripting Runtime的引用。 问题是现在,如何解决该问题来声明字典。 使用

Set Dict = CreateObject("Scripting.Dictionary")

会清空字典。

1 个答案:

答案 0 :(得分:2)

您实际上是在询问如何使用后期绑定而不是早期绑定(one article discussing thismore articles)。

而不是以下内容,它意味着早期绑定(即设置对Microsoft Scripting Runtime库的显式引用):

Public Sub SubRoutine(Dict As Scripting.Dictionary)

您需要将Sub的参数声明为通用Object类型,这在使用后期绑定时是必需的(即没有显式引用集,让程序在运行时解决问题):

Public Sub SubRoutine(Dict As Object)

Object视为可以容纳任何类型对象的容器 - 但是一旦将对象放入其中,例如一个Dictionary,那就是它变成了什么。在“本地”窗口中,它将显示为Object/Dictionary,这意味着容器为Object(这与您无关,不要担心这一点)但性质/行为是{{1} (这是你想要的)。

附录:这最后一句话并不像我想象的那样真实。请参阅后续问题中的说明:Runtime Error with Dictionary when using late binding but not early binding