Теория урока
Событие — процедура, которую Excel вызывает сам: при открытии книги, изменении ячейки, перед сохранением. Имя и место процедуры строго заданы. Проще всего создать её через списки над окном кода: слева объект (Workbook или Worksheet), справа событие.
- модуль ЭтаКнига (ThisWorkbook):
Workbook_Open,Workbook_BeforeSave,Workbook_BeforeClose; - модуль листа:
Worksheet_Change(ByVal Target As Range)— пользователь изменил ячейки,Target— какие именно;Worksheet_SelectionChange— выделение сменилось;Worksheet_Calculate— лист пересчитался.
' модуль листа «Заявки»
Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, Range("C2:C500")) Is Nothing Then Exit Sub
Application.EnableEvents = False
Target.Offset(0, 1).Value = Now ' D: когда изменили статус
Application.EnableEvents = True
End Sub
' модуль ЭтаКнига
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
If Worksheets("Заявки").Range("B2").Value = "" Then
MsgBox "Заполните ответственного в B2"
Cancel = True
End If
End SubРазбор: Intersect возвращает пересечение диапазонов. Если изменили ячейку вне C2:C500, пересечения нет
(Is Nothing) — выходим. Запись даты в D сама является изменением листа, и без EnableEvents = False
событие вызвало бы само себя снова. Cancel = True в BeforeSave отменяет сохранение.
Важно: Worksheet_Change не срабатывает при пересчёте формул — для этого есть Worksheet_Calculate.
События работают, только если макросы в книге разрешены. Изменения, сделанные макросом, нельзя отменить через Ctrl+Z.
Тренажёр не выполняет макросы и скрипты. Код из урока запускайте в настольном Excel (VBA) или в Excel для Интернета (Office Scripts). Здесь вы учитесь читать код и проверяете себя формулами и тестом.
Проверьте себя
Enter — ввести · F2 — изменить · F4 — $ в ссылке · Ctrl+C/Ctrl+V — копировать · Ctrl+Z — отменить
Esc или F6 — выйти из таблицы к кнопке «Проверить» · Shift+Tab в первой ячейке — к началу страницы