2

我编写了两个 VBA 插件Excel (Office 2011, Mac):第一个“基本”插件还为第二个插件提供功能。以后还会有其他插件使用基本插件的功能……应该可以只运行基本插件,第二个插件是可选的。

在第二个插件中,我试图添加这样的引用:

Public Sub Workbook_Open()
    Application.VBE.VBProjects("SecondAddin").References.AddFromFile ("BasicAddin.xlam")
    UseFunctionFromBasicAddin
End Sub

Private Sub UseFunctionFromBasicAddin()
    FunctionFromBasicAddin
End Sub

但是,这在启动 Excel 时给了我一个运行时错误:Run-time error 91: Object variable or With block variable not set.

当我在出现此错误后打开 VBA 编辑器时,我可以看到现在在 SecondAddin 中正确引用了 BasicAddin.xlam - 当我UseFunctionFromBasicAddin()在 VBA 编辑器中执行它时,它可以工作。它只是在启动 Excel 时不起作用。

在 VBA 编辑器 (Tools->References) 中添加引用时,加载了两个加载项,但有一个MsgBox: "This workbook is currelty referenced by another workbook and cannot be closed."

但是,我想以编程方式添加引用,因为我怀疑在具有不同路径的不同计算机上使用插件时链接会中断?

我很乐意提供有关如何消除运行时错误的建议(或者是否有更好的方法来管理不同的加载项?)...!

4

1 回答 1

0

我认为不可能修改当前工作簿的 VBA 项目引用。

这是一个 ozgrid 链接,它讨论了删除损坏的引用,他说要以编程方式执行此操作,您必须从另一个工作簿中执行此操作。

http://www.ozgrid.com/forum/showthread.php?t=23866

嗨芭芭拉,

1 参考 ISMISSING 已添加到工作簿 VB 项目参考中。(本身应该不是问题,除非您通过代码调用它或尝试安装它,然后将显示错误消息。

2 必须从不同的工作簿执行以下过程,并且必须打开目标工作簿。

VB:

Sub Del_Broken_Ref() 
      'Add a reference to the Microsoft Visual Basic for Applications Extensibility 5.3
     Dim VBReferens As VBIDE.Reference 
     Dim VBProjekt As VBIDE.VBProject 
     Dim stBok As String 

     stBok = Workbooks("Test.xls").Name 

     Set VBProjekt = Workbooks(stBok).VBProject 

     For Each VBReferens In VBProjekt.References 
         If VBReferens.IsBroken Then VBProjekt.References.Remove VBReferens 
     Next VBReferens 

 End Sub 

如果运行 Excel 2002 及更高版本,您必须允许通过工具 - 宏... - 安全访问 VB 项目。

[编辑]如果加载项 VB 项目已关闭,那么你就不走运了......

于 2012-12-15T22:10:39.313 回答