Модуль
A Worksheet
, такой как, скажем, Sheet1
, представляет собой специальный тип модуля класса, который наследует члены класса Worksheet
и позволяет легко обрабатывать события, определенные для объекта Worksheet
.Во время выполнения этот модуль Sheet1
представляет очень специфический экземпляр класса Worksheet
, поэтому любые обработчики событий, реализованные в этом модуле, всегда вызываются только для событий, запущенных из , которые object.
Таким образом, обработчик Worksheet_Activate
в выделенном коде Sheet1
будет работать только тогда, когда объект Sheet1
запускает свое событие Activate
.
Если вас не интересует какой-то конкретный или определенный лист, вам нужно обрабатывать события на другом уровне: модуль ThisWorkbook
- это специальный тип модуля класса, который наследует членов класса Workbook
и позволяет вамлегко обрабатывать события, определенные для объекта Workbook
.Этот объект рабочей книги всегда представляет определенную рабочую книгу, в которой находится проект VBA, в котором вы находитесь , и никакой другой рабочей книги.
A Workbook
объект запускает событие SheetActivate
всякий раз, когда любой лист (будь то лист Worksheet
, лист Chart
или лист любого другого типа) активирован - активированный лист вы получаете через параметр Sh
соответствующего обработчика.
* 1034Объект
Workbook
также запускает свое собственное событие
Activate
всякий раз, когда он становится
ActiveWorkbook
.
Похоже, вы хотите обработать событие Workbook
.Поэкспериментируйте с обработчиками, которые вы можете получить в модуле ThisWorkbook
, посмотрите, что лучше всего соответствует вашим требованиям.
Выберите Workbook
в поле со списком в верхнем левом углу панели кода в ThisWorkbook
, затем выберитесобытие из выпадающего списка справа, чтобы VBE автоматически генерировал прототип обработчика событий с правильной подписью:
Если вам нужно обработать Application
-В широких событиях все становится немного сложнее, но суть в том, что вам нужен модуль класса (может быть ThisWorkbook
), который объявляет переменную WithEvents
:
Private WithEvents App As Excel.Application
Итеперь в верхнем левом раскрывающемся списке будет отображаться App
, а при его выборе верхнее правое раскрывающееся меню позволит вам выбрать Excel.Application
событие для обработки ... при условии, что вы Set
этой App
объектной переменной получите действительное значениеExcel.Application
ссылка, скажем, в обработчике Workbook_Open
:
Private Sub Workbook_Open()
Set App = Me.Application
End Sub
Теперь вы можете обрабатывать событие, которое вызывается, например, при активации любой рабочей книги.