Подтвердить что ты не робот

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

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

Соответствующая ячейка будет находиться в Worksheet("BigBoard").Range("D2")

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

4b9b3361

Ответ 1

Да, это возможно с помощью событий листа:

В редакторе 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!"
    End If
Finalize:        
    Application.EnableEvents = True
End Sub

Ответ 2

Другой вариант:

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

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

Ответ 3

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

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

Ответ 4

В попытке обнаружить изменение где-то в определенном столбце (здесь, в "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

Ответ 5

Я создавал форму, в которой пользователь вводит адрес электронной почты, используемый другим макросом для отправки определенной группы ячеек по указанному адресу. Я собрал воедино этот простой код с нескольких сайтов и мои ограниченные знания VBA. Это просто следит за обновлением одной ячейки (в моем случае K22) и затем убивает любую гиперссылку в этой ячейке.

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim KeyCells As Range

    ' The variable KeyCells contains the cells that will
    ' cause an alert when they are changed.
    Set KeyCells = Range("K22")

    If Not Application.Intersect(KeyCells, Range(Target.Address)) _
           Is Nothing Then

        Range("K22").Select
        Selection.Hyperlinks.Delete

    End If 
End Sub