Создание объекта Application, реагирующего на события
Для всех приложений Office 2000 соответствующие объекты Application хотя и могут реагировать на события, но появляются как объекты без событий. И нужно приложить некоторые усилия, чтобы создать новый объект Application With Events, который может реагировать на события. Причина возникающих сложностей кроется в логике построения программного проекта, изначально принятой в Office. Дело в том, что обработчики событий, возникающих при работе с теми или иными объектами, следует размещать в специальных модулях - обработчиках событий. Для большинства стандартных объектов Office эти модули создаются автоматически в момент создания основного объекта. Так, например, при создании документа в его проекте автоматически создается модуль, обрабатывающий события этого документа, - для Excel это модуль с именем "ЭтаКнига" (ThisWorkbook). Только в этом модуле и можно создать обработчики событий объекта Workbook и всех объектов, реагирующих на события, например, элементов управления, встраиваемых непосредственно в документ.
Объект Application, единый для всех рабочих книг, по понятным причинам не вписывается в эту общую схему и для него такой модуль автоматически не создается, потому, естественно, эту работу приходится выполнять программисту.
Для того чтобы заставить реагировать на события объект Excel.Application, необходимо выполнить четыре шага:
1. Создать модуль, задающий собственный класс для объекта Excel.Application, в котором можно будет размещать обработчики возникающих событий. Устроен этот класс очень просто и состоит в момент создания из одной строчки, поскольку класс не имеет методов и имеет ровно одно свойство, задающее объект Application с событиями. Конечно, позже этот класс будет пополняться обработчиками событий. Вот как выглядит на этапе создания описание этого класса, которому я в своем примере дал имя AppWithEvents.
2. Option Explicit
3. 'Класс, описывающий объект Application With Events.
4. 'Класс не имеет методов, задается одним свойством.
Public WithEvents ExApp As Application
5. Следующее, что необходимо сделать - это определить объект вновь созданного класса AppWithEvents. И эта задача решается в одну строчку. Объявление объекта я поместил в раздел объявлений созданного ранее стандартного модуля. Заметьте, необходимо не только объявить объект, но и создать его, используя спецификатор New.
Public AppWithEv As New AppWithEvents
6. Третьим шагом является связывание двух объектов Application, стандартного и созданного объекта, умеющего реагировать на события. По-видимому, лучшим местом, где следует осуществить связывание, является обработчик события Open того документа, в котором описан класс AppWithEvents. Тогда после открытия этого документа и вплоть до его закрытия Excel будет реагировать на события, связанные с объектом Excel.Application. Вот как осуществляется связывание:
7. Private Sub Workbook_Open()
8. 'Связывание двух объектов Application -
9. 'стандартного и реагирующего на события.
10. Set AppWithEv.ExApp = Excel.Application
End Sub
11. На этом шаге созданный класс AppWithEvents можно расширить, добавив в него обработчики событий объекта Application. Я приведу пока текст только одного обработчика, который обрабатывает событие NewWorkBook, возникающее при создании новой книги.
12. Private Sub ExApp_NewWorkbook(ByVal Wb As Workbook)
13. 'Обработка события - создание новой книги.
14. Static Num As Integer
15. Num = Num + 1
16. MsgBox ("Число вновь созданных книг - " & Num _
17. & vbCrLf & "Новая книга - " & Wb.Name _
18. & " открыта в " & Time)
End Sub
Вот как выглядит сообщение, появляющееся при открытии новой книги:
Рис. 3.2.Сообщение об открытии новой книги
Дата добавления: 2016-02-20; просмотров: 701;