Vba: как запустить макрос при изменении значения ячейки
Вы можете использовать следующий синтаксис в VBA для запуска макроса при изменении определенного значения ячейки:
Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = " $A$1 " Then
Call MultiplyMacro
End If
End Sub
В этом конкретном примере макрос MultiplyMacro запускается при изменении значения ячейки A1 .
В следующем примере показано, как использовать этот синтаксис на практике.
Пример. Запуск макроса при изменении значения ячейки с помощью VBA.
Предположим, мы создаем следующий макрос под названием MultiplyMacro , который умножает значения в ячейках A1 и B1 и отображает результаты в ячейке C1 :
SubMultiplyMacro ()
Range(" C1 ") = Range(" A1 ") * Range(" B1 ")
End Sub
Например, предположим, что у нас есть значение 12 в ячейке A1 и значение 3 в ячейке B1 .
Если мы запустим этот макрос, то получим следующий результат:
Теперь предположим, что мы хотим автоматически запускать этот макрос при каждом изменении значения ячейки A1 .
Для этого мы можем щелкнуть правой кнопкой мыши имя листа и выбрать «Показать код» :
В появившемся окне редактирования кода вы можете вставить следующий код:
Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = " $A$1 " Then
Call MultiplyMacro
End If
End Sub
На следующем снимке экрана показано, как это сделать на практике:
Затем мы можем закрыть редактор VB.
Теперь всякий раз, когда мы меняем значение в ячейке A1 , макрос MultiplyMacro автоматически запускается и выполняет умножение, используя новое значение в ячейке A1 .
Например, предположим, что мы изменяем значение ячейки A1 на 10 . Как только мы изменим значение и нажмем Enter , запустится макрос:
Макрос умножает 10 на 3 и отображает результат в ячейке C2 .
Примечание . Если вы хотите запускать макрос при изменении ячейки в определенном диапазоне, вы можете использовать следующий синтаксис:
Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range(" A1:B1 ")) Is Nothing Then
Call MultiplyMacro
End If
End Sub
Это приведет к запуску макроса MultiplyMacro , если какая-либо ячейка в диапазоне A1:B1 изменится.
Дополнительные ресурсы
В следующих руководствах объясняется, как выполнять другие распространенные задачи в VBA:
VBA: как посчитать количество листов в книге
VBA: как извлечь данные из другой книги
VBA: как добавить новые листы