У меня есть книга Excel только для чтения, содержащая приложение VBA. Приложение сохраняет любые данные, которые необходимо сохранить в базе данных, и рабочая книга всегда закрывается без сохранения (путем установки ThisWorkbook.Saved = True в BeforeClose).
У меня следующая проблема:
Пользователь дважды щелкает книгу в Проводнике Windows, книга открывается.
Пользователь дважды щелкает дважды по книге в проводнике Windows.
Excel предлагает: «MyWorkbook.xls уже открыт. Повторное открытие приведет к отмене любых внесенных вами изменений. Хотите открыть MyWorkbook.xls?»
Если пользователь нажимает «Да», книга открывается повторно без выполнения обработчика события BeforeClose для экземпляра, который уже был открыт .
Это проблема в моем приложении, потому что это означает, что какой-то важный код очистки в обработчике событий BeforeClose не выполняется.
Может кто-нибудь предложить решение VBA для этого. Который может быть:
Подавление запроса на повторное открытие книги. Вместо этого молча используйте уже открытый экземпляр.
Каким-то образом заставьте BeforeClose или какой-либо другой обработчик событий запускаться в исходном экземпляре до его закрытия, чтобы я мог запустить мой код очистки.
Обновление:
Это Excel 2003.
Я могу избавиться от нежелательного приглашения, установив «ThisWorkbook.Saved = True» в обработчике событий Workbook_SheetChanged (приложение VBA отвечает за сохранение любых данных, которые должны быть сохранены в базе данных, поэтому мне все равно о сохранении изменений в Excel).
Однако это не решает мою проблему: если я сделаю это, то двойной щелчок по Рабочей книге в проводнике автоматически откроет рабочую книгу, но все равно сделает это без вызова обработчиком события «BeforeClose».
Итак, чтобы перефразировать вопрос:
- Есть ли в любом случае VBA для обнаружения и перехвата книги, открываемой таким образом?
Обновление 2
Принимая ответ Б. Киммела - похоже, нет никакого VBA-способа перехватить это событие из рабочей книги.
Решение, которое я буду реализовывать, будет состоять в том, чтобы переместить код приложения в надстройку XLA, которая автоматически загружается (если еще не загружена) при загрузке книги. Надстройка может обрабатывать события Open и BeforeClose и хранить информацию, необходимую для очистки.