Niekoľko čitateľov si položilo otázky, ktoré vyžadujú, aby program Excel spustil časť makra zakaždým, keď sa v tabuľke Excel zmení hodnota.
Po prvé, vylepšená metóda dostupná iba v XL97: Excel 97 má niektoré nové obslužné rutiny udalostí, ktoré umožňujú spustenie makra pri každej zmene bunky.
Povedzme, že kedykoľvek je do stĺpca A zadaná hodnota väčšia ako 100, chcete naformátovať bunku vedľa nej tak, aby bola červená.
- Otvorte úpravy jazyka Visual Basic (Nástroje> Makro> Editor jazyka Visual Basic)
- V ľavom okne kliknite pravým tlačidlom myši na hárok1 a vyberte možnosť Zobraziť kód.
- V hornej časti dialógového okna Kód Book1 - List1 sú dve rozbaľovacie ponuky. V rozbaľovacej ponuke vľavo vyberte položku Pracovný list. V rozbaľovacej ponuke vpravo vyberte možnosť Zmeniť.
-
Zadajte nasledujúce riadky kódu:
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
Toto makro sa spustí pri každej zmene hodnoty v bunke. Premenná Cieľ vám povie, ktorá bunka a nová hodnota bunky. Prekvapením je, že použitie tejto metódy výrazne nespomaľuje postup.
Upozorňujeme, že makro zostane aktívne, pokiaľ je pracovný hárok otvorený alebo kým nespustíte makro s nasledujúcim riadkom:
Application.EnableEvents = False
/ p> V programe Excel 95 / 7.0: Musíte použiť metódu OnEntry. Zadáte makro, ktoré chcete spustiť po zadaní akejkoľvek hodnoty. V tomto prípade obsahuje premenná Application.Caller zmenenú adresu a hodnotu. Do nového modulu zadajte toto:
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
Kontrola OnEntry zostane aktívna, kým nespustíte makro s nasledujúcim kódom:
Worksheets("Sheet1").OnEntry = False