У меня есть приложение макроса 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 еще не был открыт при запуске приложения.