【发布时间】:2015-03-02 16:54:25
【问题描述】:
是否可以将编译器条件常量与“implements”关键字一起使用,其中接口位于加载项中?
我的工作簿的类模块中有以下内容,我们称之为book1:
#Const Condition1 = 0 ''will be replaced with 1 when add-in is opened
#if Condition1 then
Implements myAddIn.iInterfaceFoo
#End if
我将加载项 myAddIn 列为参考(即在工具 -> 参考...中)。
我在加载项中成功使用了该接口与其他类,但现在我想直接在我的工作簿 book1 中调用该接口。只要加载项打开,当我编译 book1(即 Debug -> Compile VBAProject)时,它就会编译成功。
但是,当我尝试在加载项关闭的情况下编译 book1 时,出现错误
Compile error: User-defined type not defined
这正是我要避免的 - 否则,如果插件丢失(例如在其他人的计算机上),电子表格本身仍然可以工作。
【问题讨论】:
-
感谢您的反馈,我已尝试改进问题。我已经实例化了该类,但这是编译器错误而不是运行时错误。感谢
implements上的链接,但我对它的工作方式很满意 :) -
就是这样 - 它确实会尝试编译
Implements行,即使Condition1是False。我会看看那些链接的答案。 -
这是一种相当奇怪的行为。我无法重现这一点。对我来说,当条件为假时,
Implements不会被编译。 -
@MichaelChad,不,我没有,我更改了工作簿中的代码,因此我只在
sub中调用插件,而不是在function中,这意味着虽然它插件关闭时可能无法正确编译,尝试打开工作簿时不会出现错误。如果我确实设法弄清楚了一些事情(我现在已经没有时间了),我会告诉你的。