以编程方式添加引用会导致运行时错误

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

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

 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."

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

我很乐意提供关于如何摆脱运行时错误的build议(或者是否有更好的方法来pipe理不同的加载项?)…!

我不认为有可能修改当前工作簿的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及更高版本您必须允许通过工具 – macros… – 安全性访问VB项目。

[编辑]如果加载项的VB项目closures,那么你运气不好