Макро при промяна на клетката на Excel - Съвети на Excel

Съдържание

Няколко читатели са задавали въпроси, които изискват от Excel да стартира секция от макроси всеки път, когато дадена стойност се промени в електронната таблица на Excel.

Първо, подобреният метод, наличен само в XL97: Excel 97 има някои нови манипулатори на събития, които позволяват макрос да се изпълнява всеки път, когато се променя клетка.

Да приемем, че всеки път, когато в колона А се въведе стойност, по-голяма от 100, искате да форматирате клетката до нея да бъде червена.

  • Отворете редактирането на Visual Basic (Инструменти> Макрос> Редактор на Visual Basic)
  • В левия прозорец щракнете с десния бутон върху Sheet1 и изберете View Code.
  • В горната част на диалоговия прозорец 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

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