Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Контроль одной книгой событий в других - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Контроль одной книгой событий в других
Bagir Дата: Суббота, 09.02.2013, 18:05 | Сообщение № 1
Группа: Проверенные
Ранг: Участник
Сообщений: 59
Репутация: 15 ±
Замечаний: 0% ±

Хочу рассказать о варианте, в котором одна книга является главной и обрабатывает общие операции. Также дает распоряжения другим книгам, принимает и отправляет им данные. Например вариант картотеки. Есть база данных (например 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.
К сообщению приложен файл: 6651425.xls (35.0 Kb)
 
Ответить
СообщениеХочу рассказать о варианте, в котором одна книга является главной и обрабатывает общие операции. Также дает распоряжения другим книгам, принимает и отправляет им данные. Например вариант картотеки. Есть база данных (например 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
Дата добавления - 09.02.2013 в 18:05
ikki Дата: Суббота, 09.02.2013, 18:15 | Сообщение № 2
Группа: Друзья
Ранг: Старожил
Сообщений: 1906
Репутация: 504 ±
Замечаний: 0% ±

Excel 2003, 2010
обработка ошибок. закрытый код и отключение возможности прерывания макросов.
ничего нового, сорри wink


помощь по Excel и VBA
ikki@fxmail.ru, icq 592842413, skype alex.ikki
 
Ответить
Сообщениеобработка ошибок. закрытый код и отключение возможности прерывания макросов.
ничего нового, сорри wink

Автор - ikki
Дата добавления - 09.02.2013 в 18:15
Bagir Дата: Суббота, 09.02.2013, 18:17 | Сообщение № 3
Группа: Проверенные
Ранг: Участник
Сообщений: 59
Репутация: 15 ±
Замечаний: 0% ±

Спасибо! собственно говоря я ни на что и не рассчитывал. Ну просто бывает так, что много лет делаешь как привык, а "истинна где то рядом" biggrin
Обработку ошибок конечно не забываю, но увы не все и не всегда.
 
Ответить
СообщениеСпасибо! собственно говоря я ни на что и не рассчитывал. Ну просто бывает так, что много лет делаешь как привык, а "истинна где то рядом" biggrin
Обработку ошибок конечно не забываю, но увы не все и не всегда.

Автор - Bagir
Дата добавления - 09.02.2013 в 18:17
ikki Дата: Суббота, 09.02.2013, 19:19 | Сообщение № 4
Группа: Друзья
Ранг: Старожил
Сообщений: 1906
Репутация: 504 ±
Замечаний: 0% ±

Excel 2003, 2010
более "волшебные" способы мне неизвестны sad
но это не означает, что их нет tongue


помощь по Excel и VBA
ikki@fxmail.ru, icq 592842413, skype alex.ikki
 
Ответить
Сообщениеболее "волшебные" способы мне неизвестны sad
но это не означает, что их нет tongue

Автор - ikki
Дата добавления - 09.02.2013 в 19:19
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!