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 це конкретна комірка, на якій ви хочете запустити код, Мімакро це ім'я макросу, яке ви хочете запустити. Будь ласка, змініть їх на свої потреби.

2. А потім збережіть і закрийте вікно коду, тепер, коли ви введете або зміните значення в комірці А1, конкретний код буде спрацьовувати відразу.


стрілка синя права міхур Запустити або викликати макрос, коли будь-яке значення комірки змінюється в діапазоні з кодом 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 це конкретні комірки, на яких ви хочете запустити код, Мімакро це ім'я макросу, яке ви хочете запустити. Будь ласка, змініть їх на свої потреби.

2. А потім збережіть і закрийте вікно коду, тепер, коли ви введете або зміните значення в будь-якій комірці A1: B100, конкретний код буде виконаний відразу.


Видаліть усі макроси з декількох книг

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

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


Статті по темі:

Як запустити макрос автоматично перед друком у Excel?

Як запустити макрос на основі значення комірки в Excel?

Як запустити макрос на основі значення, вибраного зі спадного списку в Excel?

Як запустити макрос, клацнувши гіперпосилання в Excel?

Як запустити макрос, коли аркуш вибрано з книги?


Найкращі інструменти для підвищення продуктивності офісу

Kutools для Excel вирішує більшість ваших проблем і збільшує продуктивність на 80%

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

Вкладка Office забезпечує інтерфейс з вкладками для Office і значно спрощує вашу роботу

  • Увімкніть редагування та читання на вкладках у Word, Excel, PowerPoint, Publisher, Access, Visio та Project.
  • Відкривайте та створюйте кілька документів на нових вкладках того самого вікна, а не в нових вікнах.
  • Збільшує вашу продуктивність на 50% та зменшує сотні клацань миші для вас щодня!
дно офісної таблиці
Коментарі (17)
Поки немає оцінок. Оцініть першим!
Цей коментар був мінімізований модератором на сайті
Цей модуль у мене не працює. Він каже, що коли значення комірки змінюється, він виконує код. Я вважаю, що якщо я введу в комірку, це працює, але якщо значення tthe комірки змінюється за допомогою формули, наприклад Counta, то воно не виконується. Чи є у вас рішення для виконання макросу, коли значення VALUE змінюється за допомогою формули? Дякую, Вейне
Вейн Хайд
Цей коментар був мінімізований модератором на сайті
Та ж проблема, що й у Вейна. Будь-яка допомога дуже вдячна! Дякую Ронні
Ronnie
Цей коментар був мінімізований модератором на сайті
Привіт, хлопці,

Так, наведений вище код доступний лише тоді, коли значення комірки змінюється вручну. Якщо вам потрібно автоматично запустити певний код макросу, коли результат формули змінюється разом із відповідними клітинками, перегляньте цю статтю:
https://www.extendoffice.com/documents/excel/4618-excel-vba-run-macro-when-cell-formula-result-changes.html.
Спробуйте, будь ласка, і сподіваюся на вашу відповідь.
скайян
Цей коментар був мінімізований модератором на сайті
Це не працює... і я змінюю значення комірки вручну. Чи є якась попередня конфігурація, яку потрібно налаштувати?
Феліпе
Цей коментар був мінімізований модератором на сайті
Перевірте це в процедурі та використовуйте як параметр


Приватний допоміжний робочий лист_Change (ByVal Target As Range)

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

End Sub
Eugenio
Цей коментар був мінімізований модератором на сайті
Так, в описі сказано, що він повинен спрацьовувати, коли значення змінюється, але другий код говорить, що це коли значення не має значення, а перший не запускається, коли значення змінюється, але якщо я натискаю F5, дивлячись на код, він хоче щоб запустити MyMacro, але, схоже, не реагує на зміни значень так само, як перехід від нічого до чогось чи протилежного.
Ях
Цей коментар був мінімізований модератором на сайті
Це спрацювало вперше для мене, використовуючи список перевірки даних, який відображає текст на основі вибору списку.
Ендрю Котліфф
Цей коментар був мінімізований модератором на сайті
Працювало чудово для мене! Моя дилема полягає в тому, що я хочу, щоб це був макрос відносного посилання, і існує різниця між натисканням клавіші Enter, щоб зберегти запис, і Delete, щоб очистити клітинку.
Том
Цей коментар був мінімізований модератором на сайті
Гей, корисний код. Я думав, чи можна вставити кільце навколо осередків, які змінюються в міру їх зміни? І скидати кола щопонеділка?
Kevin
Цей коментар був мінімізований модератором на сайті
Привіт, Кевін,
Тут немає ідеї для вирішення вашої проблеми, якщо у вас є хороше рішення, будь ласка, прокоментуйте тут.
скайян
Цей коментар був мінімізований модератором на сайті
Де у вас знаходиться макрос, який ви викликаєте? Я маю свою в папці Modules, але коли я вставляю будь-яке значення в будь-яку клітинку аркуша, я отримую помилку компіляції:
Очікувана змінна або процедура, а не модуль.

Будь ласка, допоможіть.
доктор Картрайт
Цей коментар був мінімізований модератором на сайті
Привіт, доктор Картрайт!
Вибачте, що так пізно відповів.
Так, як ви сказали, код макросу повинен бути розташований у модулі, і вам потрібно змінити кодову назву на ваше власне, як показано на скріншоті:
скайян
Цей коментар був мінімізований модератором на сайті
Привіт, доброго дня
quisiera sabre el codigo para que se active una macro cuando cambia el valor de una celda de una columna, pero este valor cambia por formula,sin que el usuario introduzca ningun valor.
Роберто
Цей коментар був мінімізований модератором на сайті
Привіт, хлопці, я вирішую таку проблему: я хочу очистити назву веб-сайту, коли посилання вставлено в стовпець A, і помістити це значення у відповідну клітинку (поруч із нею) у стовпці B. Здається, проблема полягає в тому, що коли я вставляю веб-сайту в стовпці A, код повторно запускає весь список від стовпця A2 до "останнього рядка", як визначено в коді. Чи є спосіб змінити стовпець B лише після зміни одного стовпця A? Тобто, якщо я вставлю посилання в стовпець A36, я отримаю заголовок у B36, незалежно від того, чи знаходиться клітинка в середині використаного діапазону чи в самому низу. Я хотів би використовувати це без необхідності повторного запуску кількох входів, як зараз; (тобто цикл "for i =2 до останнього ряду")? Крім того, я хотів би змінити наведений нижче макрос із модульного макросу, тобто суб, на приватний суб’єкт, який реагує на зміни (тобто функцію перетину), де «ціль» — будь-яка клітинка з діапазону A:A. Велике дякую!


Підрозділ get_title_header()



Dim wb як об’єкт

Dim doc як об’єкт

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

Установіть doc = wb.document



Клітинки(i, 2) = doc.Title



Помилка Перейдіть до err_clear

Cells(i, 3) = doc.GetElementsByTagName("h1")(0).innerText

err_clear:

Якщо Err <> 0 Тоді

Err.Clear

Резюме Далі

End If

wb.Вийти

Діапазон(Комірки(i, 1), Комірки(i, 3)).Стовпці.Автопідігнання

Далі я



End Sub




Спасибі!
ДжейК
Цей коментар був мінімізований модератором на сайті
Я намагаюся автоматизувати 1 робочу книгу (СПБ), коли інша книга (Статус частин) вносить зміни. Файл стану запчастин оновлюється кожні 15 хвилин. Мені потрібно знати, як автоматизувати певний стовпець, коли відбуваються ці зміни? Будь-які ідеї
Сьюзен К. Філліпс
Цей коментар був мінімізований модератором на сайті
Я використовую наведений нижче код, щоб приховати різні стовпці залежно від вибору зі спадного списку, розташованого в клітинці C3, але після виконання обчислень у будь-якому місці аркуша ВСІ стовпці стають НЕ ПРИХОВАНИМИ. Як це виправити?

Приватний допоміжний робочий лист_Change(ByVal Target As Range)

Columns("D:F").AutoFit

Dim Proj1 як рядок
Dim Proj2 як рядок
Dim Proj3 як рядок
Dim Proj4 як рядок
Dim Proj5 як рядок
Dim Proj6 як рядок
Dim Proj7 як рядок
Dim Proj8 як рядок
Dim Proj9 як рядок
Dim Proj10 як рядок

Proj1 = ActiveWorkbook.Sheets("Projects").Range("A1").Value
Proj2 = ActiveWorkbook.Sheets("Projects").Range("A2").Value
Proj3 = ActiveWorkbook.Sheets("Projects").Range("A3").Value
Proj4 = ActiveWorkbook.Sheets("Projects").Range("A4").Value
Proj5 = ActiveWorkbook.Sheets("Projects").Range("A5").Value
Proj6 = ActiveWorkbook.Sheets("Projects").Range("A6").Value
Proj7 = ActiveWorkbook.Sheets("Projects").Range("A7").Value
Proj8 = ActiveWorkbook.Sheets("Projects").Range("A8").Value
Proj9 = ActiveWorkbook.Sheets("Projects").Range("A9").Value
Proj10 = ActiveWorkbook.Sheets("Projects").Range("A10").Value

Dim xRG As Range
Dim xHRow як ціле число
Встановіть xRG = Діапазон ("C3")
Якщо Not Intersect(Target, xRG) - це нічого, то

Якщо Target.Value = Proj1 Тоді
Application.Columns("E:F").Hidden = True
Application.Columns("D").Hidden = False

ElseIf Target.Value = Proj2 Тоді
Діапазон("D:D, F:F").EntireColumn.Hidden = True
Application.Columns("E").Hidden = False

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

Що може бути проблемою?
Джоан Керол Дюваль
There are no comments posted here yet
Залишайте свої коментарі
Публікація як гість
×
Оцініть цю публікацію:
0  Персонажі
Рекомендовані місця