Možná budete chtít spustit svůj fragment makra/VBA, když je vybrán konkrétní sešit, je vybrán list v sešitu, buňka změní svou hodnotu, když dojde k dvojitému kliknutí, když je přidán list atd. Ve všech těchto případech používáme Workbook Event Handler. Obsluha událostí nám pomáhá spouštět kód VBA vždy, když dojde k určité události.
V tomto článku se stručně seznámíme s každým obslužným programem událostí sešitu.
Co je to Workbook Event Handler?
Obslužná rutina události sešitu je podprogram, který je lokální do sešitu. Tyto kódy fungují pouze na součástech sešitu. To je samotný sešit, jsou to listy a rozsahy.
Kam napsat kód obsluhy událostí sešitu?
Události sešitu jsou zapsány pouze do objektu sešitu. Pokud napíšete událost sešitu v nějakém normálním modulu, nedojde k žádné chybě, ale prostě nebudou fungovat.
Zapisovat do objektu sešitu. Poklepejte na něj nebo klikněte pravým tlačítkem a klikněte na kód zobrazení. Zobrazí se oblast pro psaní kódu.
Jak napsat do sešitu kód pro konkrétní událost?
Nyní, když jste v režimu úprav, v rozbalovací nabídce v levém horním rohu uvidíte obecné. Klikněte na rozevírací seznam a vyberte sešit. V rozevíracím seznamu v pravém horním rohu se zobrazí všechny události. Vyberte si, co potřebujete, a kosterní kód pro tuto událost bude napsán pro vás.
Každá událost má pevný název procedury. Toto jsou vyhrazené názvy podprogramů, které začínají sešitem_. Nemůžete je použít pro jiné podprogramy
(můžete, ale budou to normální podprogramy).
Důležité: Každý podprogram z tohoto seznamu poběží na zadané události.
Jeden typ procedury události sešitu lze zapsat pouze jednou na jeden sešit. Pokud do jednoho sešitu napíšete dvě stejné procedury zpracování událostí, bude to mít za následek chybu a žádný z nich nebude proveden. Chybou budou samozřejmě nejednoznačné podprogramy.
Pojďme se krátce seznámit s každou z událostí.
1. The Workbook_SheetChange (ByVal Sh As Object, ByVal Target As Range) událost
Tato událost se spustí, když provedeme jakoukoli změnu obsahující pracovní listy (formátování vyloučeno). Pokud chcete něco udělat, pokud dojde k jakékoli změně v libovolném listu, pak kód bude:
Private Sub Workbook_SheetChange (ByVal Sh As Object, ByVal Target As Range) 'do something Msgbox "done something" End Sub
"Sh" je vždy aktivní list. "Cíl" je vždy aktivní buňka.
Další příklad: Pokud se změní A1, můžete vložit datum a čas do Cel, prl B1. V takovém případě použijeme událost workbook_sheetchange. Kód by vypadal takto:
Private Sub Workbook_SheetChange (ByVal Sh As Object, ByVal Target As Range) If Target.Address = "$ A $ 1" Then Range ("B1"). Value2 = Format (Now (), "hh: mm: ss") End If End Sub
To bude cílit pouze na buňku A1 na každém listu, protože jsme nezadali objekt "sh".
2. The Sešit_Aktivovat () událost
Tato událost se spustí, když se aktivuje kód události obsahující sešit. Základní kód této události je:
Private Sub Workbook_Activate () End Sub
Jednoduchým příkladem je zobrazení názvu sešitu, když je vybrán.
Soukromý dílčí sešit_Activate () MsgBox „Jste v sešitu“ a Activeworkbook.Name End Sub
Jakmile přejdete do sešitu, který obsahuje tento kód, událost se spustí a zobrazí se zpráva „Jste na názvu sešitu“ (list2 je v mém případě).
3. The Sešit_Otevřít () událost
Tato jedna z nejčastějších otázek, jak spustit makro, jakmile se sešit otevře. To je odpověď. Tato událost sešitu se spustí ihned po otevření sešitu. Na rozdíl od Workbook_Activate () tento kód běží pouze jednou, nikoli při každé jeho aktivaci.
Private Sub Workbook_Open () 'váš kód' End Sub
Níže uvedený příklad Workbook_Open událost jednoduše vyskočí uvítací zprávu, když otevřete kód obsahující sešit.
Soukromý dílčí sešit_Otevřít () MsgBox Konec Sub
4. The Sešit_Deaktivovat () událost
Tato událost se spustí při opuštění kódu obsahujícího sešit. Jinými slovy, pokud chcete při přepnutí sešitu něco dělat, například skrývat listy nebo cokoli jiného, použijte tuto událost VBA. Syntaxe je:
Private Sub Workbook_Deactivate () 'your code' End Sub
Níže uvedený příklad události Workbook_Deativate jednoduše zobrazí zprávu, že jste opustili hlavní list, když tento list opustíte.
Soukromý dílčí sešit_Deaktivovat () MsgBox „Opustili jste hlavní list“ Koncový díl
5. The Sešit_BeforeClose () událost
Tato událost se spustí, když potvrdíte odstranění události obsahující list VBA. Syntaxe je jednoduchá:
Soukromý dílčí sešit_BeforeClose (Zrušit jako booleovský) Konec Pod
Pokud chcete ponechat sešit otevřený, lze Storno nastavit na hodnotu True.
Níže uvedený kód se vás zeptá, zda chcete uložit obsah sešitu, který se má zavřít.
Soukromý dílčí sešit_BeforeClose (Zrušit jako Boolean) ans = MsgBox („Chcete uložit obsah tohoto sešitu?“, VbYesNo) If ans = True Then thisworkbook.save End If End Sub
6. The Workbook_BeforeSave (ByVal SaveAsUI As Boolean, Cancel as Boolean) událost
Tato událost se spustí, když je sešit uložen. Syntaxe je jednoduchá:
Private Sub Workbook_BeforeSave (ByVal SaveAsUI As Boolean, Cancel as Boolean) End Sub
SaveAsUI je nastaveno na True, pokud dojde ke změně v sešitu (ne ve VBA).
Storno lze nastavit na hodnotu true, pokud chcete sešit ponechat neuložený.
Níže uvedený kód se vás zeptá, zda chcete uložit obsah sešitu, který se má uložit.
Private Sub Workbook_BeforeSave (ByVal SaveAsUI As Boolean, Cancel as Boolean) ans = MsgBox ("Opravdu chcete uložit obsah tohoto sešitu?", VbYesNo) If ans = False Then Cancel = True End If End Sub
7. The Workbook_BeforeSave (ByVal SaveAsUI As Boolean, Cancel as Boolean) událost
Tato událost se spustí, když je sešit uložen. Syntaxe je jednoduchá:
Private Sub Workbook_BeforeSave (ByVal SaveAsUI As Boolean, Cancel as Boolean) End Sub
SaveAsUI je nastaveno na True, pokud dojde ke změně v sešitu (ne ve VBA).
Storno lze nastavit na hodnotu true, pokud chcete sešit ponechat neuložený.
Níže uvedený kód se vás zeptá, zda chcete uložit obsah sešitu, který se má uložit.
Private Sub Workbook_BeforeSave (ByVal SaveAsUI As Boolean, Cancel as Boolean) ans = MsgBox ("Opravdu chcete uložit obsah tohoto sešitu?", VbYesNo) If ans = False Then Cancel = True End If End Sub
8. The Workbook_NewSheet (ByVal Sh As Object) událost
Tato událost se spustí, když do sešitu přidáte nový list. Syntaxe je jednoduchá:
Soukromý dílčí sešit_Nový list (objekt ByVal Sh jako objekt) Koncový díl
Sh je objekt listu. Typ je vlastně hlavní objekt, takže pokud přidáme list grafu, list makra nebo dialogový list, událost stále funguje.
Níže uvedený kód přidá a zobrazí název listu, který je nově přidán.
Soukromý dílčí sešit_Nový list (objekt ByVal Sh jako objekt) MsgBox „Přidali jste nový list.“ & Sh.Name End Sub
Existuje mnoho dalších událostí objektu sešitu. Nemůžeme je zde všechny probrat. Pokud se chcete dozvědět o nějaké konkrétní události, zeptejte se v sekci komentáře níže. Doufám, že se mi v tomto článku podařilo vysvětlit základy událostí sešitu. Dejte mi vědět, jestli vám to pomohlo v sekci komentáře níže.
Související články:
Použití události změny listu ke spuštění makra po provedení jakékoli změny | Chcete -li tedy spustit makro vždy, když se list aktualizuje, používáme události pracovního listu VBA.
V případě změny provedené na listu ve specifikovaném rozsahu spusťte makro | Chcete -li spustit kód makra, když se změní hodnota v zadaném rozsahu, použijte tento kód VBA. Detekuje jakoukoli změnu provedenou v uvedeném rozsahu a spustí událost.
Nejjednodušší kód VBA pro zvýraznění aktuálního řádku a sloupce pomocí | Pomocí tohoto malého úryvku VBA zvýrazněte aktuální řádek a sloupec listu.
Oblíbené články:
50 zkratek aplikace Excel pro zvýšení produktivity | Získejte rychleji svůj úkol. Těchto 50 zkratek vám v Excelu práci ještě zrychlí.
Funkce VLOOKUP v Excelu | Toto je jedna z nejpoužívanějších a nejoblíbenějších funkcí Excelu, která slouží k vyhledávání hodnot z různých rozsahů a listů.
COUNTIF v aplikaci Excel 2016 | Pomocí této úžasné funkce spočítejte hodnoty s podmínkami. K počítání konkrétní hodnoty není nutné filtrovat data. Funkce Countif je nezbytná pro přípravu řídicího panelu.
Jak používat funkci SUMIF v aplikaci Excel | Toto je další základní funkce řídicího panelu. To vám pomůže shrnout hodnoty za konkrétních podmínek.