Найти тему
VBA Excel с нуля

VBA Excel № 89. Объект Worksheet. Событие Change в VBA.

Оглавление
Скриншот с моего ноутбука
Скриншот с моего ноутбука

Событие Change срабатывает при изменении ячейки пользователем или макросом. Однако стоит отметить, что оно не возникает, если изменение происходит в результате вычислений формулы или добавления нового объекта на рабочий лист.

Процедура Worksheet_Change вызывается с аргументом Target, который представляет собой объект Range – измененную ячейку или диапазон, вызвавший событие. Эту процедуру нужно писать в модуле кода объекта Worksheet. Приведенный ниже код выводит сообщение с адресом измененного диапазона:

Скриншот с моего ноутбука
Скриншот с моего ноутбука

Разберём код:

1.Private Sub Worksheet_Change(ByVal Target As Excel.Range):

  • Private Sub: Объявляет начало процедуры.
  • Worksheet_Change: Это событие срабатывает, когда происходит изменение на листе Excel.
  • ByVal Target As Excel.Range: Определяет параметр Target как объект Excel.Range, который представляет измененную ячейку или диапазон.

2.MsgBox "Диапазон или ячейка по адресу " & Target.Address(False, False) & " были изменены.":

  • MsgBox: Это функция, выводящая диалоговое окно с сообщением.
  • "Диапазон или ячейка по адресу " & Target.Address(False, False) & " были изменены.": Это текст сообщения, которое будет отображаться в окне. Target.Address(False, False) используется для получения адреса измененной ячейки без абсолютных ссылок на строки и столбцы.

После этого, внесите изменения на рабочем листе различными методами, чтобы отследить адрес измененного диапазона при каждом событии Change.

Скриншот с моего ноутбука
Скриншот с моего ноутбука

Если в строке Target.Address(False, False), не указывать (False, False), то сообщение будет со знаком доллара (абсолютные ссылки).

Скриншот с моего ноутбука
Скриншот с моего ноутбука

Кстати уважаемые читатели интересно отметить, что некоторые действия, которые, казалось бы, должны вызывать событие Change, на самом деле этого не делают, в то время как другие, казалось бы, не связанные с этим событием, вызывают его. Например:

Скриншот с моего ноутбука
Скриншот с моего ноутбука

Анализируя указанный выше список, можно сделать вывод, что использование события Change для отслеживания изменений в ячейках не всегда является целесообразным.

Наука
7 млн интересуются