我有一个主要的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")
会清空字典。
答案 0 :(得分:2)
您实际上是在询问如何使用后期绑定而不是早期绑定(one article discussing this,more 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