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.