Распространение макроса в качестве надстройки для других пользователей
Я ищу несколько советов, как решить проблему с распространением макросов другим пользователям в моей компании.
Я создал специальную рабочую книгу, которая содержит кучу различных типов данных, таких как даты, строки и числа. Каждый пользователь должен управлять одними и теми же типами данных, поэтому мы используем эту книгу в качестве шаблона. Данные хранятся в Столбцах, к которым я применил Условное форматирование и проверку данных, чтобы пользователи не вставляли неправильные значения. Эта Рабочая Тетрадь содержит несколько листов с конкретными именами. Имена этих листов отображаются в коде – для выполнения определенных вычислений для каждого из них (на основе имени листа).
Проблема заключается в том, что существует вероятность того, что в будущем я хотел бы внести некоторые изменения в код, например, чтобы сделать мой макрос более эффективным или реализовать некоторые изменения, которые необходимы.
Я искал в интернете, чтобы найти лучшее решение, и я думаю, что лучшее-это создайте надстройку к Excel. Но у меня есть несколько вопросов по этому поводу.
-
Действительно ли это лучшее решение? Может кто-нибудь дать мне подсказку, чтобы сделать это лучше?
-
Если надстройка является лучшей, есть ли способ добавить ее только в определенные книги (которые являются моим шаблоном)?
-
Можно ли установить надстройку, когда кто-то открывает определенную книгу (с помощью Workbook_Open), и удалить ее, когда книги закрываются (с помощью Workbook_BeforeClose). Я уже смотрел для ответов в интернете, но этот вопрос мне не ясен. Если это возможно, повлияет ли это на скорость закрытия / открытия книг?
Спасибо за любую помощь / совет!
2 ответа:
Для распространения надстройки через общий диск с вашей собственной копией разработки я настоятельно рекомендую прочитать следующую ссылку. В нем есть описание процесса установки, включая очень важный момент, который Бракс поднял в своем ответе - отвечая
No
на вопрос о копировании в личную папку надстройки.Ниже приведен скорректированный код из ссылки, которую я использую для сохранения надстроек. Он переходит в обычный модуль в самой надстройке. Он сохраняет надстройку в папке и устанавливает его атрибут в
Read only
так, что всякий раз, когда он используется кем-то, он не будет заблокирован. Эта настройка позволяет обновить файл, запустив этот макрос в любое время без необходимости преследовать пользователей и заставить их закрыть Excel.Private Sub Deploy() Dim FolderOnSharedDrive as String FolderOnSharedDrive = "Folder path to store add-in in here" With ThisWorkbook On Error Resume Next SetAttr FolderOnSharedDrive & .Name, vbNormal On Error GoTo 0 .SaveCopyAs FolderOnSharedDrive & .Name SetAttr FolderOnSharedDrive & .Name, vbReadOnly MsgBox "Deploy Completed to " & FolderOnSharedDrive & .Name End With End Sub
Неплохо бы добавить проверки на filepath и, возможно, некоторую обработку ошибок. Что касается некоторых других вопросов, которые вы поднимаете:
- надстройки могут включать невидимые листы, которые можно использовать для хранения параметров, путей, и т.д.
Можно сделать надстройку только в определенных книгах, но это потребует некоторых усилий:
Включите ленту для надстройки, которая включает обратный вызов для видимости. Установите его видимым всякий раз, когда активна определенная книга(шаблон). Он все равно будет загружен в память в любом экземпляре Excel
Вы можете программно добавлять надстройки при открытии и удалять при закрытии, как вы предлагали, проверьте этот вопрос, чтобы увидеть некоторые опции.
Добавление / удаление надстроек при закрытии или открытии определенно повлияет на скорость, но я не могу сказать, будет ли это заметно.
Поместите надстройку на сетевой диск и отметьте ее как доступную только для чтения. Используйте локальную копию для обновления. Убедитесь, что он настроен только для чтения каждый раз, когда вы копируете его, и убедитесь, что люди работают с сетевого диска.
Часто, когда люди устанавливают надстройку, они отвечают " Да " на вопрос о копировании ее на свой локальный диск, и это не правильный ответ. Если они случайно нажмут да, вам нужно будет отредактировать их реестр, чтобы удалить локальную ссылку.