Excel不保存VBA引用

时间:2013-05-14 17:02:57

标签: excel excel-vba vba

我在一些VBA模块/类中创建了一个带有大量功能的Excel .xlsm文件,现在我决定将代码分开,因为它将在4个不同的站点共享。

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

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

此时,我测试了siteXYZ.xlsm中的函数,一切都会正常工作。

但是,每次我保存siteXYZ.xlsm时,关闭Excel然后重新打开文件,它将丢失对我的vba_code.xlsm文件的引用。

如何保存使用siteXYZ.xlsm文件保存的VBA引用?

3 个答案:

答案 0 :(得分:10)

花了几个小时搜索答案并尝试各种方法,例如在vba_code.xlsm文件中添加数字签名,并尝试以编程方式在Workbook_open上添加引用,我发现了一个描述问题的论坛帖子:

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

解决方案很简单:

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

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

Private Sub Workbook_open()

End Sub

答案 1 :(得分:1)

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

答案 2 :(得分:-1)

关注@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