Няколко читатели са задавали въпроси, които изискват от 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