VBA:检测库是否在运行时可用

时间:2010-06-22 10:50:44

标签: vba xla

我有一个xla文件,指的是目标计算机上可能存在或可能不存在的其他一些Excel加载项。目前Excel无法在加载xla时出现“编译错误:无法找到项目或库”。

代码类似于:

  Dim result as Integer
  result = SomeAddIn.SomeFunction(x)

使用“On Error Goto AddInMissing”对此进行前缀无效,因为这被视为编译错误。

那么,有没有办法在VBA中按名称后期绑定/引用加载项,这样如果某个加载项不存在,我可以优雅地失败(禁用某些功能)?

3 个答案:

答案 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的信任访问