3

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

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

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

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

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

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

4

3 回答 3

15

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

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

解决方案很简单:

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

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

Private Sub Workbook_open()

End Sub
于 2013-05-14T17:08:31.413 回答
1

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

于 2013-05-14T18:03:31.917 回答
-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
于 2017-09-28T16:17:59.647 回答