2013-05-14 4 views
2

Я создал файл Excel .xlsm с множеством функций в некоторых модулях VBA/классах, и теперь я решил выделить код, потому что он будет разделен на 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.

Как сохранить ссылки VBA, сохраненные в файле siteXYZ.xlsm?

ответ

1

Обычный метод achieveing ​​это экономя ваш vba_code.xlsm как надстройке (XLA или XLAM) и сохраните его в общем местоположении, а затем добавьте добавление в Excel на 4 разных сайтах.
Вы также можете расширить этот подход, используя собственный 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 и сохранить его.

Я только дважды щелкнул ThisWorkbook под редактор VBA и добавил функцию Workbook_Open, что ничего не делает:

Private Sub Workbook_open() 

End Sub 
+0

Да, это глупо, не так ли? Мы хотим заблокировать VBA-проект рабочей книги, чтобы конечный пользователь не мог писать/вставлять свой собственный код в файл до его общего доступа, но вам нужно создать модуль, чтобы «заблокировать» его. – Fandango68

0

После @nvuono

Вам необходимо добавить какой-то модуль/ссылки на файл первенствовать для того, чтобы сохранить ссылки, которые вы добавили.

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 
Смежные вопросы