2013-05-14 187 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