Страница: 1 |
|
Вопрос: Макрос на событие (напр., откр.) ЛЮБОЙ книги Excel
|
Добавлено: 07.03.05 16:15
|
|
Автор вопроса: TolikT
|
По поиску на этом форуме не нашёл.
У WorkBook есть событие типа Workbook_Open и т.д. В него можно записать макрос, который срабатывает при открытии только данной книги.
Вопрос такой. Как назначить при открытии ЛЮБОЙ книги?
В общем случае - макрос на какое-либо событие (корректное для Workbook), напр. BeforePrint и т.п.
Создавать книгу по шаблону, в которой уже прописан макрос на Workbook_Open, не то, что надо, т.к. книга может быть создана другим пользователем.
По форумам рекомендуют примерно следующее:
"В книге PERSONAL.XLS:
1. Создаете объект класса Application WithEvents.
2. Связываете этот объект с приложением Excel.
3. Пишите обработчик для события WorkbookOpen нового объекта."
и т.д. и т.п., с подробным описанием, как это делать.
(на этом сайте не нашёл, поэтому ссылка на форум другого сайта: http://www.relib.com/forums/topic.asp?id=778094)
Однако, не работает...
Что не так? или Office97 глючный?
Ответить
|
Номер ответа: 3 Автор ответа: TolikT
Вопросов: 1 Ответов: 5
|
Профиль | | #3
|
Добавлено: 08.03.05 19:42
|
О дотошности формулировок...
Или то, что одним кажется само собой разумеющимся, новичкам совсем не очевидно...
Да, работает... И для PERSONAL.XLS тоже...
Проблема была в том, что код
Private Sub Workbook_Open()
Set App.AppEv = Application
End Sub
я располагал в самом модуле, где было объявление класса Public App As New Class1, а не в в модуле ThisWorkbook... Во всех описаниях-рекомендациях это было неочевидно (для меня)!
Да новичкам надо разжевать и в рот положить...
В итоге так (для себя, чтоб понял):
В PERSONAL.XLS создаю модуль класса Class1 и в нём пишу:
'объявление
Public WithEvents AppEv As Application
'обработчик события
Private Sub AppEv_WorkbookOpen(ByVal Wb As Workbook)
MsgBox "Привет!" 'мой макрос
End Sub
В PERSONAL.XLS создаю модуль Module1 и в нём:
'объявление экземпляра класса Class1
Public App As New Class1
В PERSONAL.XLS в модуле Workbook (по умолчанию называемый ThisWorkbook) пишем:
Private Sub Workbook_Open()
Set App.AppEv = Application
End Sub
Сохраняем PERSONAL.XLS. Закрываем Excel.
Запускаем его снова.
Теперь при открытии любого файла в Excel выскакивает "Привет!".
Надо только создать ещё доп. процедуру, чтоб наш макрос ("Привет!" не запускался при запуске самого приложения Excel.
PS. (ложка дёгтя):
Абсолютно то же самое делаю...
Но только в модуле ThisWorkbook вместо Workbook_Open пишу Workbook_BeforePrint, а в модуле класса Class1 вместо AppEv_WorkbookOpen(ByVal Wb As Workbook) пишу AppEv_WorkbookBeforePrint(ByVal Wb As Excel.Workbook, Cancel As Boolean).
Но перед печатью не видим долгожданного "Привет!"...
Мистика какая-то...
Ответить
|
Страница: 1 |
Поиск по форуму