Версия для печати

Как отследить событие(например выделение ячеек) в любой книге?

Что умеет Excel

 

Иногда при разработке надстройки просто необходимо отследить какое-либо событие в книге. Но модуль ЭтаКнига и модули листов надстройки позволяют отследить лишь те события, которые происходят в самой надстройке. А как же другие книги? Как, например, отследить событие открытия книги в Excel? Или выделение ячейки в любой книге?

Очень просто:

В модуле ЭтаКнига главной книги(надстройка либо PERSONAL.XLS) создаете переменную

Private WithEvents App As Application
Private WithEvents App As Application

На событие открытия главной книги(той, в которой пишется код и в которой Вы обявили переменную 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 скачиваний)

Также см.:
Что такое переменная и как правильно её объявить?



Поддержать автора сайта
Поделиться ссылкой
  1. Пока что нет комментариев.

Комментарий будет добавлен после проверки администратором.
Комментарии, не имеющие отношения к комментируемой статье, будут удаляться без уведомления и объяснения причин. Если есть вопрос по проблеме в Excel- добро пожаловаться на Форум