Makro udalosti na zmenu hlavičky programu Excel - Tipy pre program Excel

Obsah

Donna z Missouri sa spýtala:

Máte predstavu, ako môžem získať cestu k dokumentu vloženú v záhlaví alebo päte alebo kdekoľvek v dokumente. Môžem získať názov súboru s & f, ale nemôžem prísť na to, ako urobiť cestu.

Najskôr chápem, že spoločnosť Microsoft pridala túto funkciu do programu Excel XP, a preto im ponúkam slúchadlá, pretože ide o často kladený problém. Čitatelia, ktorí už inovovali na balík Office XP, nebudú na vyriešenie tohto problému potrebovať techniky uvedené v tipe z tohto týždňa, budú však užitočné pri riešení iných problémov.

Riešením tohto tipu je špeciálny typ makra, ktorý sa nazýva makro obsluhy udalostí. Chystáme sa krátko prevziať kontrolu nad programom Excel zakaždým, keď sa chystá vytlačiť náš zošit a pridať aktuálnu cestu do hlavičky.

Mnoho používateľov Excelu sa pustilo do nahrávania jednoduchých makier. Makrá sú uložené v module s názvom Module1 alebo Module2 a stanú sa súčasťou vášho projektu. Dnes sa chystám diskutovať o makrách obsluhy udalostí. Tieto makrá sa nachádzajú v špeciálnom module kódu, ktorý je priradený ku každému hárku alebo zošitu.

Minulé tipy, ako napríklad tip Enter Excel Time without the Colon, sa zaoberali udalosťou Worksheet_Change. Dnešný tip vyžaduje, aby sme pridali nejaký kód do udalosti BeforePrint v zošite.

Kód pridaný k udalosti sa spustí vždy, keď je táto udalosť „spustená“. V takom prípade, kedykoľvek sa zošit programu Excel vytlačí, pred spustením tlače program Excel odovzdá kontrolu nad kódom VBA a umožní, aby sa pred tlačou automaticky stalo všetko, čo v kóde VBA zadáte.

Budem predpokladať, že ste v makrách obsluhy udalostí nováčikom. Prejdem presne tým, ako sa dostať na správne miesto, aby som mohol vstúpiť do tohto makra.

Mám zošit s názvom „Tip055 Sample.xls“. Keď budem mať zošit načítaný v programe Excel, stlačím alt = "" + F11 a spustím editor jazyka Visual Basic. Predvolený vzhľad editora je uvedený na obrázku vpravo. Na ľavej strane zvyčajne vidíte tablu Projekt umiestnenú na vrchu tably Vlastnosti. Väčšina pravej strany obrazovky obsahuje tablu s kódom. Ak v zošite nemáte žiadne makrá, tabla kódu bude šedá, ako je to znázornené vpravo.

Na identifikáciu troch tabúľ som do obrázka pridal slová v modrej kurzíve - tieto vo svojom príklade neuvidíte.

Je dôležité, aby ste videli projektovú tablu v editore VB. Ak váš pohľad na editor VB nezahŕňa tablu projektu, kliknutím na Ctrl + R zobrazte tablu projektu. Alebo kliknite na ikonu panela nástrojov zobrazenú nižšie:

Na paneli projektu sa zobrazí projekt pre každý otvorený zošit programu Excel a každý nainštalovaný doplnok. Kliknutím na sivé plus vedľa názvu svojho zošita rozbalíte projekt pre svoj zošit. Potom kliknutím na sivé plus vedľa priečinka Objekty programu Microsoft Excel rozbaľte priečinok objektov. Teraz by ste mali vidieť jeden záznam pre každý pracovný hárok a jeden záznam s názvom ThisWorkbook.

Pravým tlačidlom myši kliknite na záznam pre ThisWorkbook a z rozbaľovacej ponuky vyberte možnosť Zobraziť kód.

Pravdepodobne teraz budete mať veľkú prázdnu tabuľu s bielym kódom, ktorá zaberá pravú stranu obrazovky. V hornej časti tably s kódom sú dve rozbaľovacie ponuky, ktoré hovoria: (Všeobecné) a (Deklarácie).

  • V rozbaľovacej ponuke vľavo vyberte zošit.
  • Správna rozbaľovacia ponuka je teraz vyplnená všetkými programovateľnými udalosťami spojenými so zošitom. Existujú udalosti, ktoré spustia kód vždy, keď je zošit otvorený, aktivovaný, deaktivovaný atď. Dnes chceme napísať kód do udalosti BeforePrint, takže v rozbaľovacej ponuke vpravo vyberte možnosť BeforePrint.

Upozorňujeme, že zakaždým, keď vyberiete niečo z pravej rozbaľovacej ponuky, editor VBA za vás zapíše začiatočný a konečný riadok kódu do modulu kódu. Pri prvej zmene rozbaľovacej ponuky vľavo na Workbook ste pravdepodobne predvolene dostali začiatky podprogramu Workbook_Open. Ak nebudete písať procedúru Workbook_Open, mali by ste zvážiť vymazanie tejto prázdnej procedúry.

Teraz k písaniu kódu VBA. Existuje niekoľko užitočných premenných, ktoré môžete použiť.

  • ActiveWorkbook.Path vráti cestu k zošitu. Môže to vyzerať ako „C: Moje dokumenty MrExcel“.
  • ActiveWorkbook.FullName vráti cestu a názov zošita. Môže to vyzerať ako „C: Moje dokumenty MrExcel Tip055 Sample.xls“.

Túto premennú môžete priradiť k jednej z nasledujúcich 6 pozícií:

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

Tu sú tri možné ukážkové makra.

Toto makro bude mať cestu a názov súboru pridané ako pravé päty aktívneho hárka:

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

V tomto makre bude cesta pridaná ako ľavá hlavička tabuľky 1 a ako stredná päta tabuľky 2:

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

Ak pri tlači zvyknete používať voľbu „Celý zošit“, táto verzia pridá celé meno ako stredovú pätu do všetkých hárkov:

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

Postupujte podľa jedného z týchto príkladov alebo vytvorte svoj vlastný. Po dokončení zatvorte editor VBA pomocou ponuky Súbor> Zatvoriť a návrat do programu Microsoft Excel.

Kedykoľvek vytlačíte pracovný hárok, kód sa spustí a vloží aktuálnu cestu do príslušnej hlavičky alebo päty, ktoré ste označili v kóde VBA.

Niektoré poznámky a varovania:

  • Začínajúci používatelia programu Excel budú mať malú predstavu, že tento kód je v zošite. Keď otvoria zošit, môže sa im zobraziť bezpečnostné upozornenie, že súbor obsahuje makrá, ale nebude tam žiadne varovanie, keď kód VBA udrie všetko, čo majú ako strednú pätu, a vloží tam cestu. To môže viesť k páleniu záhy. Predstavte si, že o 5 rokov niekto používa váš zošit a nový manažér chce, aby sa názov súboru presunul zo strednej päty do pravej päty. Táto osoba môže vedieť, že má manuálne meniť nastavenia v časti Súbor> PageSetup, ale ak nevie, že tam kód je, bude ich nútiť pracovať ako batty, pretože kód neustále mení svoje päty späť.

    Je skutočne nepravdepodobné, že budú môcť nájsť váš kódový modul, ale len v prípade, že tak urobia, môžete v kódovom module zanechať komentár, ktorý ich nasmeruje späť na túto webovú stránku s vysvetlením.

    Možno budete tiež chcieť do bunky A1 pridať komentár, ktorý vám pripomenie, že je nastavený obslužný program udalostí na zmenu hlavičiek tlače.

  • V rámci VBA existuje nastavenie, ktoré zabraňuje spusteniu udalostí. Ak vaše makro náhle prestane fungovať, je bežné zistiť, že niečo vo VBA zmenilo toto nastavenie, aby sa zabránilo spusteniu udalostí. Bežným scenárom je, že programátor spustí makro s:

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

    Ak sa v makre vyskytne chyba, udalosti sa už nikdy nezapnú. Ak k tomu dôjde, bude tam len malé varovanie. Ak máte podozrenie, že sa vaše obslužné rutiny udalostí nevykonávajú, prejdite do editora jazyka Visual Basic. Stlačením kombinácie klávesov Ctrl + g sa zobrazí okamžitá tabla. Na okamžitom paneli zadajte:

    Print Application.EnableEvents

    a stlačte kláves Enter. Ak zistíte, že je nastavená na hodnotu False, zadajte do okamžitého panela nasledujúci riadok:

    Application.EnableEvents = True

    a stlačte kláves Enter.

Ďakujem Donne za skvelú otázku. V procese vysvetľovania odpovede to bola skvelá príležitosť rozšíriť koncept Event Handlers vo VBA.

Zaujímavé články...