以编程方式添加引用会产生运行时错

时间:2012-09-30 15:06:26

标签: macos excel vba excel-vba excel-vba-mac

我为Excel (Office 2011, Mac)编写了两个VBA加载项:第一个“基本”加载项还为第二个加载项提供了函数。还有其他加载项将来使用基本加载项的功能...... 应该可以运行基本插件,第二个插件是可选的。

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

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编辑器时,我可以看到BasicAddin.xlam现在在SecondAddin中被正确引用 - 当我从VBA编辑器中执行UseFunctionFromBasicAddin()时,它可以工作。它在启动Excel时不起作用。

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

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

我很高兴有关如何摆脱运行时错误的建议(或者是否有更好的方法来管理不同的加载项?)......!

1 个答案:

答案 0 :(得分: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项目已关闭,那么你运气不好......