Получать уведомления обо всех изменениях ячеек в VBA


Я хочу получать уведомления обо всех обновлениях ячеек в excel. Мой текущий код выглядит примерно так:

Private Sub Worksheet_Change(ByVal Target As Range)
    ...
End Sub
Моя проблема в том, что он работает только тогда, когда происходит прямое изменение ячейки. Если я изменю ячейку, некоторые другие ячейки могут измениться, если их значения зависят от измененной ячейки. Есть ли способ обнаружить и эти изменения? Я хотел бы избежать метода зеркального копирования.
1 2

1 ответ:

Следующий код позволит вам получить доступ ко всем ячейкам, содержащим формулы, которые зависят от Target.

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim cell As Range
    ...
    On Error Resume Next
    For Each cell In Target.Dependents
        ' Do something
    Next cell
    On Error GoTo 0
    ...
End Sub

Оператор On Error Resume Next необходим, потому что цикл выдаст ошибку, если нет зависимых ячеек.

Вы также можете вызвать Application.Calculate перед этим For Each циклом, чтобы заставить пересчитать эти ячейки.