excel VBA автоматически запускает макрос всякий раз, когда изменяется ячейка

Есть ли простой способ заставить Excel автоматически выполнять макрос всякий раз, когда изменяется ячейка?

Ячейка, о которой идет речь, будет в Worksheet("BigBoard").Range("D2")

То, что я считал бы простым поиском Google, оказалось более сложным – каждый образец, который пересекается (независимо от того, что есть), или форматирование цвета, или любое другое количество вещей, которые кажутся несущественными.

Да, это возможно, используя события рабочего листа:

В редакторе Visual Basic откройте рабочий лист, который вас интересует (например, «BigBoard»), дважды щелкнув имя рабочего листа в дереве в левом верхнем углу. Поместите в модуль следующий код:

 Private Sub Worksheet_Change(ByVal Target As Range) If Intersect(Target, Me.Range("D2")) Is Nothing Then Exit Sub Application.EnableEvents = False 'to prevent endless loop On Error Goto Finalize 'to re-enable the events MsgBox "You changed THE CELL!" Finalize: Application.EnableEvents = True End Sub 

Другим вариантом является

 Private Sub Worksheet_Change(ByVal Target As Range) IF Target.Address = "$D$2" Then MsgBox("Cell D2 Has Changed.") End If End Sub 

Я считаю, что это использует меньше ресурсов, чем Intersect , что будет полезно, если ваш рабочий лист сильно изменится.

В попытке найти способ сделать целевую ячейку для метода intersect массивом таблиц имен, я наткнулся на простой способ запустить что-то, когда изменится ЛЮБАЯ ячейка или набор ячеек на конкретном листе. Этот код также помещается в рабочий лист:

 Private Sub Worksheet_Change(ByVal Target As Range) If Target.Cells.Count > 0 Then 'mycode here end if end sub 

В попытке обнаружить изменение где-то в определенном столбце (здесь в «W», т. Е. «23»), я изменил ответ Питера Альберта на:

 Private Sub Worksheet_Change(ByVal Target As Range) If Not Target.Column = 23 Then Exit Sub Application.EnableEvents = False 'to prevent endless loop On Error GoTo Finalize 'to re-enable the events MsgBox "You changed a cell in column W, row " & Target.Row MsgBox "You changed it to: " & Target.Value Finalize: Application.EnableEvents = True End Sub 
  • Удаление элементов в массиве, если элемент является определенным значением VBA
  • Определение того, является ли объект членом коллекции в VBA
  • Ошибка: «Не удалось найти Installable ISAM»
  • Уникальные случайные числа с использованием VBA
  • Как вы проверяете время работы кода VBA?
  • Ошибка Excel VBA во время выполнения «32809» - попытка понять
  • Восстановить пароль защиты листа в Excel
  • Цикл через каждую строку диапазона в Excel
  • Как удалить все не буквенно-цифровые символы из строки, кроме периода и пробела в excel?
  • Формула разделения в excel
  • Скопируйте выбранный диапазон на другой рабочий лист
  • Давайте будем гением компьютера.