Как запустить макрос при изменении определенных ячеек в Excel

Аннотация

В Microsoft Excel можно создать макрос, который вызывается только тогда, когда значение вводится в ячейку в определенном листе или в любом листе, который в настоящее время открыт.

Обратите внимание, однако, что не следует вызывать макросы без необходимости, поскольку они замедляют производительность Excel.

Дополнительная информация

Корпорация Майкрософт предоставляет примеры программирования только в целях демонстрации без явной или подразумеваемой гарантии. Данное положение включает, но не ограничивается этим, подразумеваемые гарантии товарной пригодности или соответствия отдельной задаче. Эта статья предполагает, что пользователь знаком с представленным языком программирования и средствами, используемыми для создания и отладки процедур. Специалисты технической поддержки Майкрософт могут пояснить работу той или иной процедуры, но модификация примеров и их адаптация к задачам разработчика не предусмотрена. Во многих случаях макрос должен работать только тогда, когда определенное количество ячеек имеет значения, введенные в них (именуемые в этом документе "ключевыми ячейками"). Для предотвращения запуска большого макроса каждый раз, когда значение вводится в ячейку листа, необходимо проверить, является ли ActiveCell одной из ключевых ячеек. Для этого используйте метод Intersect на ActiveCell и диапазон, содержащий ключевые ячейки, для проверки того, что ActiveCell является одной из ключевых ячеек. Если ActiveCell находится в диапазоне, содержащем ключевые ячейки, можно вызвать макрос.

Для создания макроса Visual Basic:

  1. Нажмите правой кнопкой на вкладке Sheet1, а затем нажмите Посмотреть код.

    Открывается лист модуля за sheet1.

  2. Введите следующий код в лист модуля:

    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("A1:C10")
    
    If Not Application.Intersect(KeyCells, Range(Target.Address)) _
               Is Nothing Then
    
    ' Display a message when one of the designated cells has been 
            ' changed.
            ' Place your code here.
            MsgBox "Cell " & Target.Address & " has changed."
    
    End If
    End Sub
    
  3. Нажмите Закрыть и вернуться в Microsoft Excel в меню Файл.

При вводе записи в ячейках A1:C10 на листе 1 отображается окно сообщений.