Макрос при изменении ячейки Excel - Советы по Excel

Содержание

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

Во-первых, улучшенный метод, доступный только в XL97: в Excel 97 есть несколько новых обработчиков событий, которые позволяют запускать макрос каждый раз при изменении ячейки.

Допустим, каждый раз, когда в столбец A вводится значение больше 100, вы хотите отформатировать ячейку рядом с ним, чтобы она стала красной.

  • Откройте редактор Visual Basic (Инструменты> Макрос> Редактор Visual Basic)
  • В левом окне щелкните правой кнопкой мыши Sheet1 и выберите Просмотреть код.
  • Вверху диалогового окна Book1 - Sheet1 Code есть два раскрывающихся списка. В раскрывающемся списке слева выберите Рабочий лист. В правом раскрывающемся списке выберите Изменить.
  • Введите следующие строки кода:

    Private Sub Worksheet_Change(ByVal Target As Excel.Range) If Target.Column = 1 Then ThisRow = Target.Row If Target.Value> 100 Then Range("B" & ThisRow).Interior.ColorIndex = 3 Else Range("B" & ThisRow).Interior.ColorIndex = xlColorIndexNone End If End If End Sub

Этот макрос будет запускаться каждый раз, когда значение в ячейке изменяется. Переменная Target сообщит вам, какая ячейка и новое значение ячейки. Удивительно, но использование этого метода не сильно замедляет процесс.

Обратите внимание, что макрос будет оставаться активным, пока рабочий лист открыт или пока вы не запустите макрос со следующей строкой в ​​нем:

Application.EnableEvents = False

/ p> В Excel 95 / 7.0: вам нужно использовать метод OnEntry. Вы указываете макрос, который хотите запустить после ввода любого значения. В этом случае переменная Application.Caller содержит измененный адрес и значение. Введите в новый модуль следующее:

Sub AutoOpen() Worksheets("Sheet1").OnEntry = "CheckIt" End Sub Sub CheckIt() If Application.Caller.Column = 1 Then ThisRow = Application.Caller.Row If Application.Caller.Value> 100 Then Range("B" & ThisRow).Interior.ColorIndex = 3 Else Range("B" & ThisRow).Interior.ColorIndex = xlColorIndexNone End If End If End Sub

Проверка OnEntry будет оставаться активной, пока вы не запустите макрос со следующим кодом:

Worksheets("Sheet1").OnEntry = False

Интересные статьи...