Страницы: 1
RSS
Не работает WorkBook_Open
 
Доброго времени суток.  
Написал надстройку, проверяющую открываемые книги Excel и, в зависимости от условий, разрешающую или блокирующую опредаленные действия с данными. Однако, по какой-то причине WorkBook_Open надстройки не запускается ни при открытии Excel, ни при подключении надстройки. Единственный способ - запустить макрос вручную из редактора. Может кто знает, как это исправить и избежать в дальнейшем.  
 
Второй вопрос. Можно ли макросы типа WorkBook_Open вызвать программно?
 
1 выложите здесь облегченный пример(до 100кб) или дайте ссылку где скачать в инете  
 
2 можно вызвать. как обычно - по имени:  
   Application.Run "Книга1.xls!ЭтаКнига.Workbook_Open"
Живи и дай жить..
 
WorkBook_Open размещен там, где ему и положено. И что самое главное (оно-же и самое непонятное) - он (макрос) может выполниться при открывании может и не выполниться. Событие случайное и, как правило, происходит после каких-либо манипуляций с кодом надстройки.
 
{quote}{login=слэн}{date=26.03.2011 01:15}{thema=}{post}2 можно вызвать. как обычно - по имени:  
   Application.Run "Книга1.xls!ЭтаКнига.Workbook_Open"{/post}{/quote}  
 
Как все оказвыается просто! У меня мозгов на "ЭтаКнига" не хватило. Я пытался вызвать "Книга1.xls!Workbook_Open" и получал сообщение об ошибке.  
Спасибо за науку.
 
Ещё можно попробовать вместо процедуры Sub Workbook_Open, размещаемого в модуле книги, использовать Sub Auto_Open(), размещаемую в стандартном модуле. У меня как-то тоже были проблемы с не всегда возникающим событием Workbook_Open , а событие Auto_Open возникает всегда.
С уважением, Алексей (ИМХО: Excel-2003 - THE BEST!!!)
 
{quote}{login=Alex_ST}{date=26.03.2011 06:22}{thema=}{post}Ещё можно попробовать вместо процедуры Sub Workbook_Open, размещаемого в модуле книги, использовать Sub Auto_Open(), размещаемую в стандартном модуле. У меня как-то тоже были проблемы с не всегда возникающим событием Workbook_Open , а событие Auto_Open возникает всегда.{/post}{/quote}  
 
Спасибо. Я использовал Auto_Open для принудительного запуска WorkBook_Open из модуля книги. Теперь все работает.
 
{quote}{login=The_Prist}{date=26.03.2011 05:30}{thema=Re: }{/post}{/quote}А если выполнить Application.EnableEvents = True ?  
 
Может где в коде Вы строкой Application.EnableEvents = False(или 0) отключаете отслеживание событий и не включаете по окончании кода? Или принудительное завершение процедуры выполняете, не вернув значение данного параметра в True?{/post}{/quote}  
 
Я, вероятно, не совсем правильно вас понял. Вы имеете в виду, что после Application.EnableEvents = False закрыть Excel, потом его снова открыть и EnableEvents так и остается False? Так бывает???    
В описанной мной ситуации, после ручного запуска WorkBook_Open все начинает работать и событийные макросы в том числе. Потом я закрываю Excel. Снова запускаю Excel. По логике, как я это себе представляю, при открытии книги должен выполняться марос WorkBook_Open, а он, зараза, выполняться не хочет. Точнее может выполниться, а может и не выполниться. Кучу времени убил на эксперименты но так ничего не понял. Вот такие пироги...  
Выше мне подсказали как программно запустить WorkBook_Open. Вот теперь я его принудительно из Auto_Open вызываю. Посмотрим, что получится.
 
Нет смысла через Auto_Open вызывать WorkBook_Open.  
Событие Auto_Open также как и WorkBook_Open возникает всегда при открытии книги (также как и Auto_Close при закрытии). Это просто "рудиментарный орган" VBA, оставленный для обеспечения совместимости со старыми версиями, в которых не было обработки событий открытия-закрытия книги..  
Поэтому просто пишите в Sub Auto_Open всё то, что вы собирались исполнять по событию WorkBook_Open. И всё будет работать.
С уважением, Алексей (ИМХО: Excel-2003 - THE BEST!!!)
Страницы: 1
Читают тему
Наверх