Хочу рассказать о варианте, в котором одна книга является главной и обрабатывает общие операции. Также дает распоряжения другим книгам, принимает и отправляет им данные. Например вариант картотеки. Есть база данных (например sql) с которой работает всего одна книга. Назовем ее Картотека. В базе данных клиенты, которым готовятся разные отчеты. Для каждого вида отчета существует своя книга, которая получает данные от книги Картотека, готовит отчет и отправляет данные Картотеке обратно. То есть книги с отчетами могут работать только если открыта книга Картотека. Вот небольшое описание задачи. Далее интересней. События которые возникают в книгах, могут быть отработаны как на листах Worksheet и Workbook самой книги, например Private Sub Workbook_Open(), так и объектом Excel.Application. То есть в одной книге можно узнать что делается с другой. Узнать можно абсолютно все, что есть в событиях Worksheet и Workbook. Для этого нужно создать свой класс и связать его с объектом Excel.Application. Не буду долго мучать рассказами тех, кто еще так не пробовал и не в курсе. Просто смотрите пример. Там все кратко и очень понятно. Но есть вопрос: Для того чтобы пример работал, в его процедуре Workbook_Open() происходит связывание двух объектов Application стандартного и реагирующего на события. Делается это так: Set AppWithEv.ExApp = Excel.Application. AppWithEv объявлен как Public. Но как и для всего остального публичного добра, нажатие кнопки Stop, или же команда End рвет все связи и уничтожает все переменные, оставляя только константы. То есть прилагаемый пример перестанет работать если в VB редакторе просто жмакнуть по кнопке Stop. Ну или же если в любой другой книге произойдет какаянибудь ошибка и выполнение макроса будет остановлено. Картотека перестанет следить за событиями Excel.Application до тех пор, пока мы опять не выполним в ней Set AppWithEv.ExApp = Excel.Application. Сие неудобство доставляет мне огромные неприятности. Можно как вариант проводить связывание не в Workbook_Open() а например в Workbook_Activate(), и если произошла остановка макросов, то работа возобновится после перехода в книгу Картотека, но это тоже не идеальное решение. Может кто подскажет вариант, как привязать AppWithEv.ExApp к Excel.Application чтобы их связь не рушила кнопка Stop.
Хочу рассказать о варианте, в котором одна книга является главной и обрабатывает общие операции. Также дает распоряжения другим книгам, принимает и отправляет им данные. Например вариант картотеки. Есть база данных (например sql) с которой работает всего одна книга. Назовем ее Картотека. В базе данных клиенты, которым готовятся разные отчеты. Для каждого вида отчета существует своя книга, которая получает данные от книги Картотека, готовит отчет и отправляет данные Картотеке обратно. То есть книги с отчетами могут работать только если открыта книга Картотека. Вот небольшое описание задачи. Далее интересней. События которые возникают в книгах, могут быть отработаны как на листах Worksheet и Workbook самой книги, например Private Sub Workbook_Open(), так и объектом Excel.Application. То есть в одной книге можно узнать что делается с другой. Узнать можно абсолютно все, что есть в событиях Worksheet и Workbook. Для этого нужно создать свой класс и связать его с объектом Excel.Application. Не буду долго мучать рассказами тех, кто еще так не пробовал и не в курсе. Просто смотрите пример. Там все кратко и очень понятно. Но есть вопрос: Для того чтобы пример работал, в его процедуре Workbook_Open() происходит связывание двух объектов Application стандартного и реагирующего на события. Делается это так: Set AppWithEv.ExApp = Excel.Application. AppWithEv объявлен как Public. Но как и для всего остального публичного добра, нажатие кнопки Stop, или же команда End рвет все связи и уничтожает все переменные, оставляя только константы. То есть прилагаемый пример перестанет работать если в VB редакторе просто жмакнуть по кнопке Stop. Ну или же если в любой другой книге произойдет какаянибудь ошибка и выполнение макроса будет остановлено. Картотека перестанет следить за событиями Excel.Application до тех пор, пока мы опять не выполним в ней Set AppWithEv.ExApp = Excel.Application. Сие неудобство доставляет мне огромные неприятности. Можно как вариант проводить связывание не в Workbook_Open() а например в Workbook_Activate(), и если произошла остановка макросов, то работа возобновится после перехода в книгу Картотека, но это тоже не идеальное решение. Может кто подскажет вариант, как привязать AppWithEv.ExApp к Excel.Application чтобы их связь не рушила кнопка Stop.Bagir
Спасибо! собственно говоря я ни на что и не рассчитывал. Ну просто бывает так, что много лет делаешь как привык, а "истинна где то рядом" Обработку ошибок конечно не забываю, но увы не все и не всегда.
Спасибо! собственно говоря я ни на что и не рассчитывал. Ну просто бывает так, что много лет делаешь как привык, а "истинна где то рядом" Обработку ошибок конечно не забываю, но увы не все и не всегда.Bagir