Модуль класса с объектом WithEvents
Модуль, в котором будут появляться обработчики событий объекта Excel.Application, синтаксически является модулем класса, который нужно создать. Этот класс очень прост по своей структуре и при создании он содержит единственное закрытое свойство - соответствующий объект Application, объявленный со спецификатором WithEvents. Так что в нашем примере все описание создаваемого класса, который назовем, например, ExcelWithEvents сводится к одной содержательной строке:
Option Explicit 'Класс ExcelWithEvents Private WithEvents xlApp As Excel.Application
Как только такое свойство определено в классе, в окне кода этого модуля появляется объект xlApp, обладающий событиями, тут же можно выбрать из списка соответствующее событие, создать заготовку и затем наполнить ее содержанием. Взгляните на соответствующий рисунок:
увеличить изображение
Рис. 4.4. Класс с объектом Excel.Application WithEvents
Мы ограничились созданием двух обработчиков события NewWorkbook и OpenWorkbook. Вот их текст:
Private Sub xlApp_NewWorkbook(ByVal Wb As Excel.Workbook) MsgBox("Рад, что вы открыли книгу " & Wb.Name) End Sub
Private Sub xlApp_WorkbookOpen(ByVal Wb As Excel.Workbook) MsgBox ("Рад, что вы открыли книгу " & Wb.Name) End Sub
Как видите, первая проблема решается достаточно просто и не требует введения новых средств. Но, обратите внимание, остается непонятным, что характеризует наш единственный объект xlApp, - конкретный экземпляр приложения, для которого создаются обработчики событий, или эти обработчики распространяются на множество экземпляров объектов класса ExcelWithEvents Но, поскольку объекты Application присутствуют в одном экземпляре, то не будем сейчас вдаваться в эти тонкости, позже мы еще вернемся к этому вопросу.