我有一个xla文件,指的是目标计算机上可能存在或可能不存在的其他一些Excel加载项。目前Excel无法在加载xla时出现“编译错误:无法找到项目或库”。
代码类似于:
Dim result as Integer
result = SomeAddIn.SomeFunction(x)
使用“On Error Goto AddInMissing”对此进行前缀无效,因为这被视为编译错误。
那么,有没有办法在VBA中按名称后期绑定/引用加载项,这样如果某个加载项不存在,我可以优雅地失败(禁用某些功能)?
答案 0 :(得分:1)
您可以查看Addins
收藏品;
if AddIns("The addins title").Installed = True then ...
或者您可以检查文件名
For Each Item In AddIns
Debug.? Item.Path, Item.Name
Next
答案 1 :(得分:0)
谢谢大家。迭代Application.VBE.VBProjects允许我检测xla是否存在。下一步是将所有调用包装到包装器模块中目标xla中定义的函数。这是必要的,因为我试图避免编译错误。如果xla可用,我只调用这些包装器函数,幸运的是VBA在需要之前不编译模块(这基本上意味着创建两个包装器 - 外部包装器检查xla是否可用以及内部调用目标xla)。
更复杂的解决方案可能会同时考虑AddIns和VBE.VBEProjects
答案 2 :(得分:0)
您不需要使用VBE.VBProjects或Addins:XLA是Workbooks集合的隐藏成员,因此如果您知道XLA的名称,则可以直接签入Workbooks集合以查看它是否已打开。 这样,您就不需要用户系统具有对VBE的信任访问