Как отследить событие(например выделение ячеек) в любой книге?
Что умеет Excel
Иногда при разработке надстройки просто необходимо отследить какое-либо событие в книге. Но модуль ЭтаКнига и модули листов надстройки позволяют отследить лишь те события, которые происходят в самой надстройке. А как же другие книги? Как, например, отследить событие открытия книги в Excel? Или выделение ячейки в любой книге?
Очень просто:
В модуле ЭтаКнига главной книги(надстройка либо PERSONAL.XLS) создаете переменную
На событие открытия главной книги(той, в которой пишется код и в которой Вы обявили переменную App) присваиваете ей значение:
Private Sub Workbook_Open() Set App = Application End Sub
Private Sub Workbook_Open()
Set App = Application
End Subи создаете событие(аналогично выбору других событий в книге — в левом окне выбора объектов выбираете App. А в правом появятся все доступные события).

Вот так будет выглядеть код отслеживания открытия любой книги:
Private Sub App_WorkbookOpen(ByVal Wb As Workbook) MsgBox "Вы открыли книгу:" & Wb.Name End Sub
Private Sub App_WorkbookOpen(ByVal Wb As Workbook)
MsgBox "Вы открыли книгу:" & Wb.Name
End SubТеперь при открытии любой книги будет появляться сообщение с имененм именно открытой книги.
А с помощью этого кода Вы сможете отследить создание новой книги:
Private Sub App_NewWorkbook(ByVal Wb As Workbook) MsgBox "Вы создали новую книгу" End Sub
Private Sub App_NewWorkbook(ByVal Wb As Workbook)
MsgBox "Вы создали новую книгу"
End SubОтслеживаем выделение ячеек во всех открытых книгах:
Private Sub App_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range) MsgBox "Вы выделили ячейку с адресом: " & Target.Address End Sub
Private Sub App_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
MsgBox "Вы выделили ячейку с адресом: " & Target.Address
End SubЕстественно, вместо показа MsgBox-ов можно назначить выполнение других(нужных) действий. Например, вызов макроса(Call ИмяМакроса). Макрос в таком случае должен быть размещен в стандартном модуле и иметь статус Public(или вовсе без статуса). Сам модуль должен тоже находится в той же книге.
Tips_Macro_How_Catch_Events.xls (29,5 KiB, 1 022 скачиваний)
Также см.:
→Что такое переменная и как правильно её объявить?

4165
