2013-05-14 252 views
2

我在一些VBA模块/类中创建了一个带有许多功能的Excel .xlsm文件,现在我决定分离出代码,因为它将在4个不同的站点上共享。Excel不保存VBA参考

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

在每个siteXYZ.xlsm文件我会去“工具|参考”在VBA编辑器的菜单,并在共享文件位置添加一个引用到共享vba_code.xlsm \ share_location \ fileLocation \ vba_code.xlsm

此时,我测试了siteXYZ.xlsm中的函数,并且一切正常。

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

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

回答

1

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

8

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

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

解决办法很简单:

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

我只是双击的VBA编辑器中的ThisWorkbook,并添加了功能Workbook_open不会做任何事情:

Private Sub Workbook_open() 

End Sub 
+0

是啊这很愚蠢是不是?我们希望锁定工作簿的VBAproject,以便最终用户在共享之前不能将自己的代码写入/插入到文件中,但您必须创建一个模块以“锁定”它。 – Fandango68 2017-12-07 03:37:09

0

继@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