Excel不保存VBA参考

我在一些VBA模块/类中创build了一个带有一堆function的Excel .xlsm文件,现在我已经决定分离出这些代码,因为它将在4个不同的站点上共享。

我将vba_code.xlsm保存到共享位置,并创build了4个不同的siteXYZ.xlsm文件。

在每个siteXYZ.xlsm文件中,我将转到VBA编辑器中的“Tools | References”菜单,并在共享文件位置\ share_location \ fileLocation \ vba_code.xlsm中添加对共享vba_code.xlsm的引用

在这一点上,我testing了siteXYZ.xlsm的function,一切都会正常工作。

但是,每次我保存siteXYZ.xlsm,closuresExcel,然后重新打开该文件将失去对我的vba_code.xlsm文件的引用。

如何保持与我的siteXYZ.xlsm文件保存的VBA引用?

通常的做法是将vba_code.xlsm保存为插件(XLA或XLAM)并将其存储在共享位置,然后将插件添加到Excel中的4个不同的站点。
您也可以使用您自己的Addin Loader而不是Excel来扩展此方法。
http://www.decisionmodels.com/downloads.htm上有一个Addin Loader的工作示例

花了几个小时寻找答案,并尝试各种方法,如添加到vba_code.xlsm文件的数字签名,并试图以编程方式在Workbook_open上添加引用我find了一个论坛post描述问题:

我的siteXYZ.xlsm文件中没有定义VBA代码或macros,因此Excel拒绝保存VBA项目,因此没有将VBA引用保存到vba_code.xlsm。

解决scheme很简单:

添加任何 VBA代码到siteXYZ.xlsm并保存。

我只需在VBA编辑器下双击ThisWorkbook,并添加一个Workbook_open函数,该函数不会执行任何操作:

Private Sub Workbook_open() End Sub 

关注@nvuono

您需要添加某种模块/引用到Excel文件,以保存您添加的引用。

 Private Function addJunkModuleToGetReferencesToSave(ByRef wb As Workbook) Set new_module = wb.VBProject.VBComponents.Add(vbext_ct_ClassModule) new_module.name = "Junk" new_module.CodeModule.AddFromString "" End Function