общий *.xlam на сетевом диске - вызывать подпрограммы и функции

Я просматривал форум в поисках решения моей проблемы ниже, но, к сожалению, безуспешно. Я написал некоторые подпрограммы и функции, которые мне нужно сделать доступными для моих коллег, и которые я хотел бы иметь возможность обновлять централизованно. Для этого следуя этой блестящей статье, https://www.excelguru.ca/content.php?152-Deploying-Add-ins-in-a-Network-Environment , я сделал лист, который может развернуть мой код на * .xlam на нашем сетевом диске вместе с кодом для установки надстройки для пользователей Excel. Чтобы пользователи могли вызывать подпрограммы/функции в *.xlam, я добавил ссылку на шаблон рабочей книги, где необходимы подпрограммы/функции.

Но, так как надстройка находится на сетевом диске, она не всегда будет доступна, и пользователь получит ошибку компиляции «Не удается найти проект или библиотеку».

Итак, мои вопросы:

  1. Есть ли способ по-прежнему использовать эталонный метод, но обойти ошибку «Не удается найти проект или библиотеку»?
  2. Есть ли лучший способ для пользователей вызывать функции из надстройки?
  3. И большой: Должен ли я делиться и обновлять код совершенно по-другому?

С уважением Кнексе Полезно Бесполезно


person Knekse    schedule 03.12.2019    source источник


Ответы (1)


Так как:

  1. Надстройка может загружать другую надстройку. Workbooks.Open (имя файла: = pathToFile и addinFilename, ReadOnly: = True)
  2. Сетевой ресурс не всегда будет доступен.

Вы можете попробовать использовать надстройку-заглушку на клиентских машинах.

Эта заглушка может:

  1. Проверьте, доступна ли нужная надстройка в сети, и загрузите ее, если это возможно.
  2. Вариант A: Предоставьте функции-заглушки/подпрограммы, которые вызывают реальные подпрограммы в нужной надстройке, когда она доступна, и в противном случае возвращают подходящее состояние ошибки или сообщение по умолчанию.
  3. Вариант Б. Автоматически скопируйте нужную надстройку в кэш на локальном компьютере и при необходимости загрузите кэшированную копию.

Благодаря тому, что заглушка проста и хорошо протестирована, ее не нужно часто менять, поэтому вы не потеряете все преимущества сохранения основной надстройки в сети.

Обратите внимание, что нет необходимости добавлять сетевую надстройку в коллекцию AddIns/AddIns2; вы можете просто использовать Workbooks.Open(pathToAddIn, ReadOnly:=True). Он не будет отображаться в ‹‹Файл › Параметры › Надстройки ›› при открытии таким образом. Следовательно, если вы хотите выгрузить или перезагрузить надстройку, не закрывая Excel, либо ваша надстройка-заглушка должна предоставить способ сделать это, либо вам нужно будет сделать это с помощью VBA (например, в окне Immediate окна VBA). редактор).

person IIsi 50MHz    schedule 14.12.2019
comment
Привет Илси. спасибо за вклад. Мне просто нужно немного больше пояснений ;) Итак, вы говорите, что было бы неплохо иметь локальную (заглушку, и очень простую) надстройку на компьютере пользователя, чтобы дополнить сетевую надстройку. Затем используйте заглушку. добавить в (попытаться) загрузить сетевую надстройку и действовать соответственно? - person Knekse; 07.01.2020
comment
C'est vrai. да. Например, заглушка содержит stubfoo(), а stubfoo() запрашивает у хоста VBA команду On Error GoTomissingAddin:Application.Run(maininfoo) - person IIsi 50MHz; 25.01.2020