Události listů

V poradně na serveru http://www.zive.cz jsem viděl nezodpovězený dotaz VBA makro - Automaticke spustenie.
Má se automaticky spustit makro, když číselná hodnota v nějaké buňce je větší než v jiné buňce s mezní hodnotou. Očekával bych, jednoduchou odpověď. Stačí vědět, že když se něco děje v oknech, nastávají události.
Pokud jsou události prázdné (bez kódu), neděje se nic, pokud je nějaký kód v těle události, tak se vykoná.

V našem případě v listě Excelu měním údaje v buňkách nebo vybírám buňky či oblasti, pak nastávají události listu (WorkSheet) a jmenují se WorkSheet_Change(), WorkSheet_Calculate() nebo WorkSheet_SelectionChange() a další.

Poznámka: Pokud náhodou nevíte jak se k událostem dostanete:
V prostředí Visual Basic v okně Project Explorer (VBAProject-UdalostiListu.xls) rozbalíme Objekty Excelu (Microsoft Excel Objects) a dvojklikneme na List. V okně kódu List1 rozbalíme levý horní zavírací seznam a vybereme objekt WorkSheet, Uvidíme první událost. V pravém zavíracím seznamu vybíráme další události.


Takže, když chceme automaticky spouštět makro, které reaguje na událost, do události napíšu jeho kód. Pokud tam napíšu jen název makra z modulu, tak se také vykoná (vlastně volám podprogram).

Nyní k zajímavým událostem listů:
WorkSheet_Change() - nastane když se změní obsah buňky (samozřejme také se potvrdí zápis).
WorkSheet_Calculate() - nastane, když se přepočítají vzorce.
WorkSheet_SelectionChange() - nastane, když v listě vyberu jinou buňku nebo oblast.

Uvnitř těla události testuji podmíněným příkazem a když je podmínka splněná, něco udělám.
Například:
Když v nějaké buňce je číslo větší než v jiné buňce, spusť Makro1 - viz přiložený příklad.

If Range("D14") > Range("D17") Then Makro1
Když vybraná buňka je v 3. řádku a 5. sloupci, čti barvu pozadi do proměnné barva - viz publikovaná hra Logik
If ActiveCell.Row=3 and ActiveCell.Column=5 then barva=ActiveCell.BackColor
Když vybraná buňka je v 5. řádku a v 3., 5. nebo 7. sloupci, nastav barvu pozadi z proměnné barva - viz publikovaná hra Logik
If ActiveCell.Row=3 and (ActiveCell.Column=3 Or ActiveCell.Column=5 Or ActiveCell.Column=7) Then ActiveCell.BackColor=barva
Více je v uvedených příkladech

Stažení souboru

Zpět na hlavní stránku