Вопрос

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

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

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

Я бы на лету создал некоторый код в персональном файле user.xls для обработки перехода, но я не могу установить флаг «Доверительный доступ к проекту Visual Basic» на компьютерах пользователей, поэтому не могу реплицировать код в надстройке.

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

Кто-нибудь еще может предложить лучшее решение? Это должен быть 100% Excel, не VSTO и т. Д.

Это было полезно?

Решение 2

Было приятно, что Дик Куслейка писал сегодня об управлении надстройками!

http: // www. dailydoseofexcel.com/archives/2009/07/29/conditionally-load-excel-add-ins/

Несколько хороших предложений, которые можно применить к моей ситуации там.

Другие советы

Мы используем отдельный плагин в качестве загрузчика. <Ол>

  • Основной плагин может обновить загрузчик
  • Если основной плагин нуждается в обновлении, он загружает загрузчик, затем использует вызов OnTime, чтобы запланировать вызов подпрограммы начальной загрузки в загрузчике и сразу же выгружает себя.
  • Выполнен вызов по времени.
  • bootstrapper загружает основной модуль, перезапускает основной модуль, выгружает сам себя.
  • Сложно, но это работает.

    Один из способов добиться чего-то похожего, хотя и давным-давно, заключается в следующем:

    Предоставьте кнопку «Обновить» на общей странице (может быть общим файлом, если вы используете много), и когда пользователи щелкают по нему, он открывает xls в сетевом расположении и копирует код из этого файла в локальный файл. и закрывает вновь открытые файлы.

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

    Это сработало, так как у меня было мало пользователей, а обновлений было довольно мало. Если вы хотите автоматическое обновление, что мешает вам проверять номер версии при каждом открытии файла.

    Используя встроенное развертывание ClickOnce, версия надстройки проверяется при каждом запуске приложения, использующего ее (Excel). Не уверен, что таким способом можно развернуть неуправляемый код.

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

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

    Лицензировано под: CC-BY-SA с атрибуция
    Не связан с StackOverflow
    scroll top