Note: The other languages of the website are Google-translated. Back to English

Как запустить макрос при изменении значения ячейки в Excel?

Обычно в Excel мы можем нажать клавишу F5 или кнопку «Выполнить», чтобы выполнить код VBA. Но пробовали ли вы когда-нибудь запустить конкретный код макроса при изменении значения ячейки? В этой статье я расскажу о некоторых быстрых приемах, которые помогут справиться с этой задачей в Excel.

Запуск или вызов макроса при изменении значения определенной ячейки с кодом VBA

Запуск или вызов макроса при изменении любого значения ячейки в диапазоне с кодом VBA


стрелка синий правый пузырь Запуск или вызов макроса при изменении значения определенной ячейки с кодом VBA

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

1. Щелкните правой кнопкой мыши вкладку листа, на которой вы хотите выполнить макрос, если значение ячейки изменится, а затем выберите Просмотреть код из контекстного меню, а в открывшемся Microsoft Visual Basic для приложений окна, скопируйте и вставьте следующий код в пустой модуль:

Код VBA: запускать макрос при изменении значения ячейки:

Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Address = "$A$1" Then
        Call Mymacro
    End If
End Sub

doc запускает макрос, если ячейка изменяется 1

Внимание: В приведенном выше коде A1 это конкретная ячейка, на основе которой вы хотите запустить код, Mymacro это имя макроса, который вы хотите запустить. Пожалуйста, измените их по своему усмотрению.

2. А затем сохраните и закройте окно кода, теперь, когда вы вводите или изменяете значение в ячейке A1, определенный код будет запускаться сразу.


стрелка синий правый пузырь Запуск или вызов макроса при изменении любого значения ячейки в диапазоне с кодом VBA

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

1. Щелкните правой кнопкой мыши вкладку листа, на которой вы хотите выполнить макрос, если значение ячейки изменится, а затем выберите Просмотреть код из контекстного меню, а в открывшемся Microsoft Visual Basic для приложений окна, скопируйте и вставьте следующий код в пустой модуль:

Код VBA: запускать макрос при изменении любого значения ячейки в диапазоне:

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("A1:B100")) Is Nothing Then
Call Mymacro
End If
End Sub

doc запускает макрос, если ячейка изменяется 2

Внимание: В приведенном выше коде A1: B100 это конкретные ячейки, на основе которых вы хотите запустить код, Mymacro это имя макроса, который вы хотите запустить. Пожалуйста, измените их по своему усмотрению.

2. А затем сохраните и закройте окно кода, теперь, когда вы вводите или изменяете значение в любой ячейке A1: B100, конкретный код будет выполнен сразу.


Удалить все макросы из нескольких книг

Kutools for Excel's Пакетное удаление всех макросов Утилита может помочь вам удалить все макросы из нескольких книг по мере необходимости. Загрузите бесплатную пробную версию Kutools for Excel прямо сейчас!

Kutools for Excel: с более чем 300 удобными надстройками Excel, которые можно попробовать бесплатно без ограничений в течение 30 дней. Загрузите и бесплатную пробную версию прямо сейчас!


Статьи по теме:

Как запустить макрос автоматически перед печатью в Excel?

Как запустить макрос на основе значения ячейки в Excel?

Как запустить макрос на основе значения, выбранного из раскрывающегося списка в Excel?

Как запустить макрос, щелкнув гиперссылки в Excel?

Как запустить макрос, когда лист выбран из книги?


Лучшие инструменты для работы в офисе

Kutools for Excel решает большинство ваших проблем и увеличивает вашу производительность на 80%

  • Снова использовать: Быстро вставить сложные формулы, диаграммы и все, что вы использовали раньше; Зашифровать ячейки с паролем; Создать список рассылки и отправлять электронные письма ...
  • Бар Супер Формулы (легко редактировать несколько строк текста и формул); Макет для чтения (легко читать и редактировать большое количество ячеек); Вставить в отфильтрованный диапазон...
  • Объединить ячейки / строки / столбцы без потери данных; Разделить содержимое ячеек; Объединить повторяющиеся строки / столбцы... Предотвращение дублирования ячеек; Сравнить диапазоны...
  • Выберите Дубликат или Уникальный Ряды; Выбрать пустые строки (все ячейки пустые); Супер находка и нечеткая находка во многих рабочих тетрадях; Случайный выбор ...
  • Точная копия Несколько ячеек без изменения ссылки на формулу; Автоматическое создание ссылок на несколько листов; Вставить пули, Флажки и многое другое ...
  • Извлечь текст, Добавить текст, Удалить по позиции, Удалить пробел; Создание и печать промежуточных итогов по страницам; Преобразование содержимого ячеек в комментарии...
  • Суперфильтр (сохранять и применять схемы фильтров к другим листам); Расширенная сортировка по месяцам / неделям / дням, периодичности и др .; Специальный фильтр жирным, курсивом ...
  • Комбинируйте книги и рабочие листы; Объединить таблицы на основе ключевых столбцов; Разделить данные на несколько листов; Пакетное преобразование xls, xlsx и PDF...
  • Более 300 мощных функций. Поддерживает Office/Excel 2007-2021 и 365. Поддерживает все языки. Простое развертывание на вашем предприятии или в организации. Полнофункциональная 30-дневная бесплатная пробная версия. 60-дневная гарантия возврата денег.
вкладка kte 201905

Вкладка Office: интерфейс с вкладками в Office и упрощение работы

  • Включение редактирования и чтения с вкладками в Word, Excel, PowerPoint, Издатель, доступ, Visio и проект.
  • Открывайте и создавайте несколько документов на новых вкладках одного окна, а не в новых окнах.
  • Повышает вашу продуктивность на 50% и сокращает количество щелчков мышью на сотни каждый день!
офисный дно
Сортировать комментарии по
Комментарии (17)
Оценок пока нет. Оцените первым!
Этот комментарий был сведен к минимуму модератором на сайте
Этот модуль у меня не работает. В нем говорится, что при изменении ЗНАЧЕНИЯ ячейки он выполнит код. Я обнаружил, что если я ВВОДУ в ячейку, она работает, но если значение ячейки изменяется по формуле, например, Counta, то она не выполняется. У вас есть решение для выполнения макроса, когда ЗНАЧЕНИЕ изменяется с помощью формулы? Спасибо, Уэйн
Этот комментарий был сведен к минимуму модератором на сайте
Та же проблема, что и у Уэйна. Любая помощь высоко ценится! Спасибо, Ронни.
Этот комментарий был сведен к минимуму модератором на сайте
Привет ребята,

Да, приведенный выше код доступен только в том случае, если значение ячейки изменяется вручную. Если вам нужно автоматически запустить определенный код макроса при изменении результата формулы с изменением относительных ячеек, посетите эту статью:
https://www.extendoffice.com/documents/excel/4618-excel-vba-run-macro-when-cell-formula-result-changes.html.
Пожалуйста, попробуйте и надеюсь на ваш ответ.
Этот комментарий был сведен к минимуму модератором на сайте
Это не работает... и я изменяю значение ячейки вручную. Есть ли какие-либо предварительные настройки, которые необходимо настроить?
Этот комментарий был сведен к минимуму модератором на сайте
Проверьте это в процедуре и используйте в качестве параметра


Private Sub Worksheet_Change (Цель ByVal как диапазон)

MsgBox Target.Address & "-" e Target.AddressLocal

End Sub
Этот комментарий был сведен к минимуму модератором на сайте
Да, в описании сказано, что он должен срабатывать при изменении значения, но второй код говорит, что это когда значение равно нулю, а первый тоже не срабатывает при изменении значения, но если я нажимаю F5 при просмотре кода, он хочет для запуска MyMacro, но, похоже, не реагирует на изменения значений так сильно, как переход от ничего к чему-то или наоборот.
Этот комментарий был сведен к минимуму модератором на сайте
Это сработало для меня впервые, используя список проверки данных, который отображает текст на основе выбора списка.
Этот комментарий был сведен к минимуму модератором на сайте
Работал отлично для меня! Моя дилемма заключается в том, что я хочу, чтобы это был макрос относительной ссылки, и есть разница между нажатием ввода, чтобы сохранить запись, и удалением, чтобы очистить ячейку.
Этот комментарий был сведен к минимуму модератором на сайте
Эй, полезный код. Я думал, можно ли вставить кольцо вокруг ячеек, которые изменяются по мере их изменения? И сбрасывать круги каждый понедельник?
Этот комментарий был сведен к минимуму модератором на сайте
Привет, Кевин,
Здесь нет идеи для решения вашей проблемы, если у вас есть хорошее решение, пожалуйста, прокомментируйте здесь.
Этот комментарий был сведен к минимуму модератором на сайте
Макрос, который вы вызываете, где он у вас находится? У меня есть мой в папке «Модули», но когда я помещаю любое значение в любую ячейку листа, я получаю сообщение об ошибке компиляции:
Ожидаемая переменная или процедура, а не модуль.

Пожалуйста помоги.
Этот комментарий был сведен к минимуму модератором на сайте
Привет, доктор Картрайт,
Извините, что отвечаю вам так поздно.
Да, как вы сказали, код макроса должен быть расположен в модуле, и вам нужно изменить кодовое имя на свое собственное имя, как показано на следующем снимке экрана:
Этот комментарий был сведен к минимуму модератором на сайте
Привет добрый день
quisiera saber эль codigo para que se active una macro cuando cambia el valor de una celda de una columna, pero este valor cambia por формула, sin que el usuario introduzca ningun valor.
Этот комментарий был сведен к минимуму модератором на сайте
Привет, ребята, я решаю следующую проблему: я хочу очистить название веб-сайта, когда ссылка вставляется в столбец A, и поместить это значение в соответствующую ячейку (рядом с ней) в столбце B. Кажется, проблема заключается в том, что как только я вставлю веб-сайт в столбце A, код повторно запускает весь список от столбца A2 до «последней строки», как определено в коде. Есть ли способ изменить столбец B только после изменения одного столбца A? Т.е. если Ipaste ссылку в столбец A36 я получаю заголовок в B36, независимо от того, находится ли ячейка в середине используемого диапазона или в самом низу. Я хотел бы использовать это без повторного запуска нескольких входов в том виде, в каком он есть в настоящее время; (т.е. цикл «для i = 2 до последней строки»)? Кроме того, я хотел бы изменить приведенный ниже модульный макрос, т. е. подпрограмму, на частную подпрограмму, реагирующую на изменение (т. е. функцию пересечения), где «целью» является любая ячейка из диапазона A: A. Большое спасибо!


Подпрограмма get_title_header()



Dim wb как объект

Затемнить документ как объект

Dim sURL как строка

Dim lastrow As Long

lastrow = Sheet1.Cells(Rows.Count, "A").End(xlUp).row



Для i = 2 В последнюю строку

Установите wb = CreateObject("internetExplorer.Application")

sURL = ячейки (i, 1)



wb.navigate SURL

wb.Visible = Ложь



Пока wb.Busy

DoEvents

венед



''HTML-документ

Установить документ = wb.document



Ячейки (i, 2) = doc.Title



При ошибке Перейти к err_clear

Ячейки(i, 3) = doc.GetElementsByTagName("h1")(0).innerText

ошибка_очистить:

Если Ошибка <> 0 Тогда

Err.Clear

Продолжить

End If

wb.Выйти

Диапазон (Ячейки (i, 1), Ячейки (i, 3)). Столбцы. Автоподбор

Затем я



End Sub




Спасибо!
Этот комментарий был сведен к минимуму модератором на сайте
Я пытаюсь автоматизировать 1 рабочую книгу (BOM), когда другая рабочая книга (состояние деталей) вносит изменения. Файл состояния деталей обновляется каждые 15 минут. Мне нужно знать, как автоматизировать определенный столбец, когда происходят эти изменения? Любые идеи
Этот комментарий был сведен к минимуму модератором на сайте
Я использую приведенный ниже код, чтобы скрыть различные столбцы в зависимости от выбора из раскрывающегося списка, расположенного в ячейке C3, но после выполнения вычисления в любом месте листа ВСЕ столбцы становятся НЕСКРЫТЫМИ. Как я могу это исправить?

Private Sub Worksheet_Change (ByVal Target As Range)

Столбцы("D:F").Автоподбор

Dim Proj1 как строка
Dim Proj2 как строка
Dim Proj3 как строка
Dim Proj4 как строка
Dim Proj5 как строка
Dim Proj6 как строка
Dim Proj7 как строка
Dim Proj8 как строка
Dim Proj9 как строка
Dim Proj10 как строка

Proj1 = ActiveWorkbook.Sheets("Проекты").Range("A1").Значение
Proj2 = ActiveWorkbook.Sheets("Проекты").Range("A2").Значение
Proj3 = ActiveWorkbook.Sheets("Проекты").Range("A3").Значение
Proj4 = ActiveWorkbook.Sheets("Проекты").Range("A4").Значение
Proj5 = ActiveWorkbook.Sheets("Проекты").Range("A5").Значение
Proj6 = ActiveWorkbook.Sheets("Проекты").Range("A6").Значение
Proj7 = ActiveWorkbook.Sheets("Проекты").Range("A7").Значение
Proj8 = ActiveWorkbook.Sheets("Проекты").Range("A8").Значение
Proj9 = ActiveWorkbook.Sheets("Проекты").Range("A9").Значение
Proj10 = ActiveWorkbook.Sheets("Проекты").Range("A10").Значение

Dim xRG As Range
Dim xHRow как целое число
Установить xRG = диапазон ("C3")
Если Not Intersect(Target, xRG) ничто, то

Если Целевое.Значение = Проект1 Тогда
Application.Columns("E:F").Скрытый = Истина
Приложение.Столбцы("D").Скрытый = Ложь

ИначеЕсли Цель.Значение = Проект2 Тогда
Range("D:D, F:F").EntireColumn.Hidden = True
Application.Columns("E").Скрытый = Ложь

End If
End If
End Sub
Этот комментарий был сведен к минимуму модератором на сайте
Это именно то, что я искал. Когда пользователь вводит значение в ячейку, запускается простой макрос сортировки. Макрос сам по себе работает нормально, но я получаю сообщение об ошибке недопустимого использования свойства, используя предложенный код.

В чем может быть проблема?
Здесь еще нет комментариев
Оставляйте свои комментарии
Публикация как гость
×
Оценить этот пост:
0   Характеристики
Предлагаемые места

Подписывайтесь на Нас

Copyright © 2009 - www.extendoffice.ком. | Все права защищены. Питаться от ExtendOffice, | Карта сайта
Microsoft и логотип Office являются товарными знаками или зарегистрированными товарными знаками Microsoft Corporation в США и / или других странах.
Защищено Sectigo SSL