Распространение макроса в качестве надстройки для других пользователей


Я ищу несколько советов, как решить проблему с распространением макросов другим пользователям в моей компании.

Я создал специальную рабочую книгу, которая содержит кучу различных типов данных, таких как даты, строки и числа. Каждый пользователь должен управлять одними и теми же типами данных, поэтому мы используем эту книгу в качестве шаблона. Данные хранятся в Столбцах, к которым я применил Условное форматирование и проверку данных, чтобы пользователи не вставляли неправильные значения. Эта Рабочая Тетрадь содержит несколько листов с конкретными именами. Имена этих листов отображаются в коде – для выполнения определенных вычислений для каждого из них (на основе имени листа).

Проблема заключается в том, что существует вероятность того, что в будущем я хотел бы внести некоторые изменения в код, например, чтобы сделать мой макрос более эффективным или реализовать некоторые изменения, которые необходимы.

Я искал в интернете, чтобы найти лучшее решение, и я думаю, что лучшее-это создайте надстройку к Excel. Но у меня есть несколько вопросов по этому поводу.

  1. Действительно ли это лучшее решение? Может кто-нибудь дать мне подсказку, чтобы сделать это лучше?

  2. Если надстройка является лучшей, есть ли способ добавить ее только в определенные книги (которые являются моим шаблоном)?

  3. Можно ли установить надстройку, когда кто-то открывает определенную книгу (с помощью Workbook_Open), и удалить ее, когда книги закрываются (с помощью Workbook_BeforeClose). Я уже смотрел для ответов в интернете, но этот вопрос мне не ясен. Если это возможно, повлияет ли это на скорость закрытия / открытия книг?

Спасибо за любую помощь / совет!

2 2

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 и, возможно, некоторую обработку ошибок. Что касается некоторых других вопросов, которые вы поднимаете:

  • надстройки могут включать невидимые листы, которые можно использовать для хранения параметров, путей, и т.д.
  • Можно сделать надстройку только в определенных книгах, но это потребует некоторых усилий:

    1. Включите ленту для надстройки, которая включает обратный вызов для видимости. Установите его видимым всякий раз, когда активна определенная книга(шаблон). Он все равно будет загружен в память в любом экземпляре Excel

    2. Вы можете программно добавлять надстройки при открытии и удалять при закрытии, как вы предлагали, проверьте этот вопрос, чтобы увидеть некоторые опции.

  • Добавление / удаление надстроек при закрытии или открытии определенно повлияет на скорость, но я не могу сказать, будет ли это заметно.

Поместите надстройку на сетевой диск и отметьте ее как доступную только для чтения. Используйте локальную копию для обновления. Убедитесь, что он настроен только для чтения каждый раз, когда вы копируете его, и убедитесь, что люди работают с сетевого диска.

Часто, когда люди устанавливают надстройку, они отвечают " Да " на вопрос о копировании ее на свой локальный диск, и это не правильный ответ. Если они случайно нажмут да, вам нужно будет отредактировать их реестр, чтобы удалить локальную ссылку.