Makro události ke změně záhlaví aplikace Excel - Tipy pro Excel

Obsah

Donna z Missouri se zeptala:

Máte nějakou představu, jak mohu získat cestu, kde je dokument uložen, označený v záhlaví nebo zápatí - nebo kdekoli v dokumentu. Mohu získat název souboru s & f, ale nemohu přijít na to, jak udělat cestu.

Nejprve chápu, že společnost Microsoft přidala tuto funkci do aplikace Excel XP, a nabízím jim sláva, protože se jedná o často kladený problém. Čtenáři, kteří již upgradovali na Office XP, nebudou k vyřešení tohoto problému potřebovat techniky uvedené v tomto týdenním tipu, budou však i nadále užitečné při řešení dalších problémů.

Řešením tohoto tipu je speciální typ makra, který se nazývá makro obsluhy událostí. Chystáme se krátce převzít kontrolu nad Excelem pokaždé, když se chystá vytisknout náš sešit a přidat aktuální cestu do záhlaví.

Mnoho uživatelů aplikace Excel se pustilo do nahrávání jednoduchých maker. Makra jsou uložena v modulu nazvaném Module1 nebo Module2 a stanou se součástí vašeho projektu. Dnes budu diskutovat makra obsluhy událostí. Tato makra jsou umístěna na speciálním modulu kódu, který je přidružen ke každému listu nebo sešitu.

Minulé tipy, jako je například Enter Excel Time without the Colon tip, se zabývaly událostí Worksheet_Change. Dnešní tip vyžaduje, abychom do události WorkPack BeforePrint přidali nějaký kód.

Kód přidaný k události se spustí vždy, když je událost „spuštěna“. V tomto případě, kdykoli se vytiskne sešit aplikace Excel, před zahájením tisku Excel předá kontrolu nad kódem VBA a umožní, aby se cokoli, co v kódu VBA určíte, automaticky stalo před tiskem.

Předpokládám, že jste v makrech obsluhy událostí noví. Procházím přesně tím, jak se dostat na správné místo, abych mohl vstoupit do tohoto makra.

Mám sešit s názvem „Tip055 Sample.xls“. Když se sešit načte v aplikaci Excel, stisknu alt = "" + F11 a spustím editor jazyka Visual Basic. Výchozí vzhled editoru je uveden na obrázku vpravo. Vlevo obvykle vidíte podokno projektu naskládané nahoře v podokně Vlastnosti. Většina pravé strany obrazovky obsahuje podokno kódu. Pokud v sešitu nemáte žádná makra, podokno kódu bude šedé, jak je znázorněno vpravo.

Přidal jsem k obrázku slova modré kurzívy, abych identifikoval tři podokna - ve svém příkladu je neuvidíte.

Je důležité, abyste mohli vidět podokno projektu v editoru VB. Pokud váš pohled na editor VB nezahrnuje podokno projektu, stisknutím kláves Ctrl + R zobrazte podokno projektu. Nebo klikněte na ikonu panelu nástrojů zobrazenou níže:

V podokně projektu se zobrazí projekt pro každý otevřený sešit aplikace Excel a každý nainstalovaný doplněk. Kliknutím na šedé znaménko vedle názvu sešitu rozbalíte projekt sešitu. Poté kliknutím na šedé plus vedle složky Objekty aplikace Microsoft Excel rozbalte složku objektů. Nyní byste měli vidět jednu položku pro každý list a jednu položku nazvanou ThisWorkbook.

Pravým tlačítkem klikněte na položku ThisWorkbook a z rozbalovací nabídky vyberte Zobrazit kód.

Pravděpodobně nyní budete mít velký prázdný bílý panel kódu, který zabírá pravou stranu obrazovky. V horní části podokna kódu jsou dvě rozevírací nabídky, které říkají (Obecné) a (Deklarace).

  • Z rozbalovací nabídky vlevo vyberte Sešit.
  • Správná rozevírací nabídka je nyní naplněna všemi programovatelnými událostmi přidruženými k sešitu. Jsou zde události, které spustí kód pokaždé, když je sešit otevřen, aktivován, deaktivován atd. Dnes chceme napsat kód do události BeforePrint, takže v rozevíracím seznamu vpravo vyberte BeforePrint.

Všimněte si, že pokaždé, když vyberete něco z rozevíracího seznamu vpravo, editor VBA zapíše počáteční a koncový řádek kódu do modulu kódu pro vás. Při první změně rozevírací nabídky vlevo na Sešit jste pravděpodobně ve výchozím nastavení obdrželi počátky podprogramu Workbook_Open. Pokud nebudete psát proceduru Workbook_Open, měli byste zvážit odstranění této prázdné procedury.

Nyní k psaní kódu VBA. Existuje několik užitečných proměnných, které můžete použít.

  • ActiveWorkbook.Path vrátí cestu sešitu. Může to vypadat jako „C: Moje dokumenty MrExcel“.
  • ActiveWorkbook.FullName vrátí cestu a název sešitu. Může to vypadat jako „C: Moje dokumenty MrExcel Tip055 Sample.xls“.

Tuto proměnnou můžete přiřadit k jedné z následujících 6 pozic:

Worksheets("Sheet1").PageSetup.LeftHeader = ActiveWorkbook.FullName Worksheets("Sheet1").PageSetup.CenterHeader = ActiveWorkbook.FullName Worksheets("Sheet1").PageSetup.RightHeader = ActiveWorkbook.FullName Worksheets("Sheet1").PageSetup.LeftFooter = ActiveWorkbook.FullName Worksheets("Sheet1").PageSetup.CenterFooter = ActiveWorkbook.FullName Worksheets("Sheet1").PageSetup.RightFooter = ActiveWorkbook.FullName

Tady jsou tři možná ukázková makra.

Toto makro bude mít cestu a název souboru přidáno jako pravé zápatí aktivního listu:

Private Sub Workbook_BeforePrint(Cancel As Boolean) ActiveSheet.PageSetup.RightFooter = ActiveWorkbook.FullName End Sub

Toto makro bude mít cestu přidanou jako levé záhlaví List1 a jako středové zápatí List2:

Private Sub Workbook_BeforePrint(Cancel As Boolean) Worksheets("Sheet1").PageSetup.LeftHeader = ActiveWorkbook.Path Worksheets("Sheet2").PageSetup.CenterFooter = ActiveWorkbook.Path End Sub

Pokud máte tendenci používat při tisku možnost „Celý sešit“, tato verze přidá celé jméno jako středové zápatí do všech listů:

Private Sub Workbook_BeforePrint(Cancel As Boolean) For Each Sh In ActiveWorkbook.Worksheets Sh.PageSetup.CenterFooter = ActiveWorkbook.FullName Next Sh End Sub

Postupujte podle jednoho z těchto příkladů nebo si vytvořte vlastní. Po dokončení zavřete editor VBA pomocí Soubor> Zavřít a vraťte se do aplikace Microsoft Excel.

Kdykoli vytisknete list, spustí se kód a vloží aktuální cestu do příslušného záhlaví nebo zápatí, které jste uvedli v kódu VBA.

Některé poznámky a upozornění:

  • Začínající uživatelé aplikace Excel budou mít malou představu, že tento kód je v sešitu. Když otevřou sešit, mohou obdržet varování zabezpečení, že soubor obsahuje makra, ale nebude tam žádné varování, když kód VBA uhodí vše, co mají jako středové zápatí, a vloží tam cestu. To může vést k pálení žáhy. Představte si, že za 5 let někdo používá váš sešit a nový manažer chce, aby se název souboru přesunul ze středního zápatí do pravého zápatí. Tato osoba možná bude vědět, že má ručně změnit nastavení v nabídce Soubor> PageSetup, ale pokud nezná kód, který tam je, bude je řídit, protože kód neustále mění jejich zápatí zpět.

    Je opravdu nepravděpodobné, že budou moci najít váš kódový modul, ale v případě, že ano, možná budete chtít v modulu kódu zanechat komentář, který je přesměruje zpět na tento web k vysvětlení.

    Můžete také chtít přidat komentář do buňky A1 a připomenout si, že je nastaven obslužný program událostí pro změnu tiskových hlaviček.

  • Ve VBA existuje nastavení, které zabraňuje spuštění událostí. Pokud vaše makro náhle přestane fungovat, je běžné zjistit, že něco ve VBA toto nastavení změnilo, aby se zabránilo spuštění událostí. Běžným scénářem je, že programátor spustí makro pomocí:

    Application.EnableEvents = False '… macro here… Application.EnableEvents = True

    Když dojde k chybě v makru, události se nikdy nezapnou. Pokud k tomu dojde, je zde malé varování. Pokud máte podezření, že se vaše obslužné rutiny událostí nevykonávají, přejděte do editoru jazyka Visual Basic. Stisknutím kláves Ctrl + g vyvolejte okamžité podokno. V okamžitém podokně zadejte:

    Print Application.EnableEvents

    a stiskněte klávesu Enter. Pokud zjistíte, že je nastavena na hodnotu False, zadejte do přímého podokna následující řádek:

    Application.EnableEvents = True

    a stiskněte klávesu Enter.

Díky Donně za skvělou otázku. V procesu vysvětlování odpovědi to byla skvělá příležitost rozšířit koncept obsluhy událostí ve VBA.

Zajímavé články...