【发布时间】:2012-02-13 06:33:37
【问题描述】:
我喜欢在我的 VBA 项目中使用早期绑定,因为我喜欢在开发过程中自动完成方法名称等。我也喜欢知道如果我拼错了方法名,编译器会警告我的信心。
但是,要使用早期绑定,我需要添加对相关库的引用(例如,“Microsoft Scripting Runtime”)。这对于像这样的“标准”库来说很好,但有时我想使用用户机器上可能存在也可能不存在的库。
理想情况下,如果库不存在,我想显示一条有用的消息(例如“此计算机上未安装 xyz,因此无法使用此功能”)。如果我只使用 late 绑定,那么我可以这样做:
Dim o As Object
Set o = CreateObject("foo", "bar")
If o Is Nothing Then
MsgBox "nope"
End If
但是,如果我添加了对库的引用以使用早期绑定,那么如果该库不存在,则在加载 VBA 项目时会出现编译错误。因此,none 的代码运行(包括检测库不存在的代码)。
有什么办法可以绕过这个 catch-22 吗?
【问题讨论】:
-
我使用早期绑定来利用 Intellisense,然后转换为后期绑定以避免特定于版本的代码。
-
@JP:请参阅我对 mwolfe02 的回答 - 我认为这对我来说不是一个可行的解决方案,除非您有其他方法来实现它。
-
我将所有声明放在每个过程的顶部,并使用适用于后期或早期绑定的 CreateObject。那么,简单地将所有早期绑定声明更改为后期绑定“作为对象”。但条件编译也可以。
标签: vba late-binding early-binding