Не удается закрыть книгу, поскольку Excel 2010 считает, что на нее все еще ссылаются - PullRequest
0 голосов
/ 11 ноября 2011

У меня есть приложение макроса Excel 2010, которое состоит из нескольких файлов рабочей книги.

FileName (ProjectName)
VFApp.xlsm (VFAppVBA)
VFReportClasses.xlsm(VFReportVBA)
VFImportClasses.xlsm (VFImportVBA)
VFDataClasses.xlsm (VFDataVBA)
ZShared.xlsm (ZSharedVBA)

  • На общую папку ссылаются все другие рабочие книги.*
  • Данные ссылаются на приложение, отчет и импорт.
  • На отчет и импорт ссылаются приложение.

Я пытаюсь закрыть все указанные файлы, когдафайл приложения закрыт.Это работает для всего, кроме ZShared.xlsm.Для этого я получаю 'Эта рабочая книга в настоящее время ссылается на другую рабочую книгу и не может быть закрыта.' ошибка.

Единственная полу-полезная информация, которую я нашел в Интернете, была http://support.microsoft.com/kb/211856и http://support.microsoft.com/default.aspx?scid=kb;en-us;159794. Я добавил некоторые записи во все классы в ZShared.Все экземпляры его классов корректно завершаются, и у меня нет объектов рабочей книги, указывающих на ZShared.

Я даже пытался переименовать файлы, как (http://www.allquests.com/question/3996335/Upgrading-Add-ins-from-XL2003-to-XL2007.html).

. Странно, если я вручную открываю VFDataClasses.xlsm перед открытием VFApp.xlsm, тогда ZShared будет корректно закрываться без ошибок. Если я простооткройте VFApp.xlsm и позвольте ему открыть все другие файлы, на которые есть ссылки, я получаю вышеуказанную ошибку.

У кого-нибудь есть предложения по выяснению, почему Excel считает, что на книгу все еще ссылаются?

Clairification:

  • Каждая рабочая книга ссылается на другие с помощью Tools -> References.
  • ZShared состоит из общедоступных классов и модулей с общедоступными подпрограммами, функциями и константами, а также3 глобальные переменные.
  • Я, насколько я знаю, не делаю ничего, чтобы ссылаться на рабочие книги ZShared или другие объекты Excel.
  • Глобальные переменные находятся в ZShared, поэтому мне не нужновоссоздайте их в каждом приложении, которое ссылается на ZShared. Они обрабатываются через публичные InitializeGlobalClasses и TerminateGlobalClasses
  • Я добавил m_InstanceId к каждому классу и отлаживал логгиng ко всем Class_Initialize и Class_Terminate, поэтому я на 100% уверен, что все экземпляры классов завершаются правильно.

Интересно, возможно ли, что Excel создает какую-то скрытую ссылку на рабочую книгу на основе оператора With или чего-то такого, что очищается неправильно.С другой стороны, не имеет смысла, что это произойдет, только если ZShared еще не был открыт при запуске приложения.

1 Ответ

0 голосов
/ 18 февраля 2012

Я так и не нашел ответа на вопрос, почему Excel считает, что на файл все еще ссылаются. В качестве обходного пути я сделал 2 вещи.

  • Спрятал книгу ZShared в Excel, чтобы обычные пользователи не могли ее увидеть.
  • Установите для ZShared значение «Только чтение», чтобы я мог заменить файл обновленной версией, даже если люди все еще его открывают.

Если кто-нибудь знает способ заглянуть во внутренние компоненты Excel, чтобы понять, почему его справочная сборка мусора не работает, я хотел бы знать.

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