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 в Excel
  • Форматирование даты MM / DD / YYYY в текстовом поле в VBA
  • Как найти последнюю строку, содержащую данные на листе Excel с макросом?
  • Защита ячеек в Excel, но они могут быть изменены сценарием VBA
  • Загрузка добавлений при программном программировании Excel
  • Получение Excel для обновления данных на листе из VBA
  • Разбор JSON в Excel VBA
  • Многопоточность в VBA
  • Рабочие книги VBA. Не запрашивать, если пользователь хочет сохранить?
  • Кнопка добавления / вычитания Excel VBA
  • Excel: невероятное сокращение и расширение элементов управления
  • Interesting Posts

    Как использовать и стилить новый AlertDialog из appCompat 22.1 и выше

    Есть ли способ поиска в меню приложений Windows, например, CMD + SHIFT + / OSX OSX?

    java – прохождение массива в хранимой процедуре oracleа

    против против “iostream.h”

    C # создавать / изменять / читать файлы .xlsx

    Как записывать как микрофон, так и динамик в Windows 7

    Загружает ли Tomcat один и тот же файл библиотеки в память дважды, если они находятся в двух веб-приложениях?

    Необязательно вводить сценарий контента

    Как установить условную точку останова в Xcode на основе свойства объекта?

    Не удается сохранить пакетный файл вскоре после его запуска в Windows 7

    USB-накопитель загадочно становится защищенным от записи

    Что означают запятые и пробелы в нескольких classах в CSS?

    Могу ли я получить доступ к архивам Microsoft Outlook PST с помощью любых других инструментов?

    Как отключить копирование / вставку из / в EditText

    Максимизированный хром показывает небольшую линию на втором экране

    Давайте будем гением компьютера.