Макрос при зміні комірки Excel - Поради Excel

Зміст

Кілька читачів задавали питання, які вимагають від Excel запускати розділ макросу щоразу, коли значення змінюється в таблиці Excel.

По-перше, вдосконалений метод, доступний лише в XL97: Excel 97 має кілька нових обробників подій, які дозволяють запускати макрос щоразу, коли клітина змінюється.

Скажімо, що будь-коли, коли в стовпець А вводиться значення більше 100, ви хочете відформатувати комірку поруч із нею червоною.

  • Відкрийте редагування Visual Basic (Інструменти> Макрос> Редактор Visual Basic)
  • У лівому вікні клацніть правою кнопкою миші Аркуш1 і виберіть Переглянути код.
  • У верхній частині діалогового вікна 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

Цікаві статті...