Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - VBA

Страница: 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 глючный?

Ответить

  Ответы Всего ответов: 6  

Номер ответа: 1
Автор ответа:
 GSerg



Вопросов: 0
Ответов: 1876


 Профиль | | #1 Добавлено: 08.03.05 04:44
Да нет, работает, просто кто сказал, что personal.xls пойдёт загружаться? :)

Весь этот код помести в отдельный файл, этот файл сохрани как .xla. Потом Сервис - Надстройки - Находишь этот xla и подключаешь его. И он всё обрабатывает...

Ответить

Номер ответа: 2
Автор ответа:
 ActiveX



Вопросов: 0
Ответов: 73
 Профиль | | #2 Добавлено: 08.03.05 07:30
А что файл "PERSONAL.XLS" будет делать при запуске приложения, если он расположен в папке /XLSTART ...

Ответить

Номер ответа: 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).
Но перед печатью не видим долгожданного "Привет!"...
Мистика какая-то...

Ответить

Номер ответа: 4
Автор ответа:
 ActiveX



Вопросов: 0
Ответов: 73
 Профиль | | #4 Добавлено: 09.03.05 22:02
К сожалению как бы нам ни хотелось, но мистики в жизни нет. Просто оставьте в покое нижеуказанный код и всё будет в порядке ...

Private Sub Workbook_Open()
Set App.AppEv = Application
End Sub

Ответить

Номер ответа: 5
Автор ответа:
 TolikT



Вопросов: 1
Ответов: 5
 Профиль | | #5 Добавлено: 11.03.05 18:46
Да, не сообразил, что надо оставить только ThisWorkbook - Workbook_Open, а остальное использовать с BeforePrint.

PS: (дежурная ложка дёгтя):
Событие Workbook_BeforePrint срабатывает не только перед печатью, но и перед просмотром. Как избавиться от этой излишней назойливости?

Спасибо всем.

Ответить

Номер ответа: 6
Автор ответа:
 Дмит



Вопросов: 11
Ответов: 160
 Web-сайт: dimit.pochta.ru
 Профиль | | #6
Добавлено: 12.03.05 21:07
К сожалению ни как. В Excel это не предусмотрено.

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам