Как повторно использовать код с VBA - PullRequest
10 голосов
/ 14 марта 2012

Каков наилучший способ избежать дублирования кода при работе в VBA?

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

Есть ли хороший способ повторить эту функциональность в VBA?

1 Ответ

13 голосов
/ 14 марта 2012

Дальнейшие действия касаются Excel, но я уверен, что то же самое применимо к любым продуктам Office.

Самый простой способ - сохранить повторно используемый код в виде надстройки (* .xla для Excel 2003, * .xlam для Excel 2007+). Затем вы добавляете надстройку в Excel, и все открытые таблицы будут иметь доступ к пользовательским функциям, которые есть в вашем надстройке. Если вы добавляете конкретный код VBA в электронную таблицу, вы можете добавить ссылку на свой надстройку, и ваш код VBA будет иметь доступ ко всем общедоступным подпрограммам, функциям и классам вашего надстройки.

В моей организации мы используем 3 самодельных надстройки - они хранятся в C: \ Program Files \ OrganisationName. И каждый имеет к ним доступ. Когда обновление сделано, нам нужно только скопировать новую версию на каждый жесткий диск и перезапустить Excel, и у них будет новая версия.

Дополнения содержат служебные функции, такие как функции для:

  • чтение данных из / запись данных в электронные таблицы / файлы / базы данных.
  • обычные манипуляции с данными, такие как удаление дубликатов из списка
  • расширенные статистические функции
  • и т.д.

Несколько недостатков:

  • Если у вас открыто несколько экземпляров Excel, только один может обновить надстройку, остальные экземпляры находятся в режиме только для чтения
  • Если происходит сбой Excel, режим автоматического восстановления обычно не сохраняет изменения, внесенные в надстройку (TBC в более новых версиях) - есть несколько инструментов для регулярного автоматического сохранения

Альтернативой является, например, разработка библиотек xlls или COM на VB или C #, но я этого не пробовал.

В Интернете есть множество учебных пособий, если вам нужна более подробная процедура.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...