Eseménymakró az Excel fejlécének módosításához - Excel tippek

Tartalomjegyzék

Donna Missouriból azt kérdezte:

Van ötlete, hogyan tudom elérni azt az utat, ahol a dokumentumot iktatják a fejlécben vagy a láblécben - vagy bárhol a dokumentumban. A & f paranccsal be tudom szerezni a fájl nevét, de nem tudom kitalálni, hogyan kell megtenni az elérési utat.

Először is megértem, hogy a Microsoft hozzáadta ezt a funkcionalitást az Excel XP-hez, és felajánlom nekik, hogy ez egy gyakran feltett probléma. Azoknak az olvasóknak, akik már frissítettek az Office XP-re, nem lesz szükségük a heti tippekben szereplő technikákra a probléma megoldásához, de továbbra is hasznosak lesznek más problémák megoldásában.

Ennek a tippnek a megoldása egy speciális típusú makró, amelyet eseménykezelő makrónak hívnak. Röviden átvesszük az Excel irányítását minden alkalommal, amikor a munkafüzetünket kinyomtatni készül, és hozzáadja az aktuális elérési utat a fejléchez.

Számos Excel felhasználó megkönnyítette egyszerű makrók rögzítését. A makrókat a Modul1 vagy a Modul2 nevű modulban tárolják, és a projekt részévé válnak. Ma az eseménykezelő makrókat fogom megvitatni. Ezek a makrók egy speciális kódmodulon találhatók, amely minden munkalaphoz vagy munkafüzethez társul.

A múltbeli tippek, például az Enter Excel Time be a kettőspont nélkül tipp foglalkoztak a Worksheet_Change eseményvel. A mai tipp megköveteli, hogy adjunk hozzá néhány kódot a Munkafüzet BeforePrint eseményéhez.

Az eseményhez hozzáadott kód futtatásra kerül, ha az esemény "beindul". Ebben az esetben az Excel munkafüzet kinyomtatásakor, bármikor a nyomtatás megkezdése előtt az Excel átadja a vezérlést a VBA kódnak, és lehetővé teszi, hogy bármi, amit VBA kódban megadhat, automatikusan megtörténjen a nyomtatás előtt.

Feltételezem, hogy új vagy az eseménykezelő makrókban. Pontosan át fogom járni, hogyan juthatok el a megfelelő helyre ahhoz, hogy beléphessek ebbe a makróba.

Van egy 'Tip055 Sample.xls' nevű munkafüzetem. Az Excelbe betöltött munkafüzettel az Alt = "" + F11 billentyűkombinációt lenyomva indulok el a Visual Basic Editor alkalmazásba. A szerkesztő alapértelmezett megjelenése a jobb oldalon látható. A bal oldalon általában egy Projekt panel látható a Tulajdonságok ablaktábla tetején. A képernyő jobb oldalán nagyrészt egy kódrész található. Ha nincs makród a munkafüzetben, a kód ablaktábla szürke lesz, ahogy a jobb oldalon látható.

Kék dőlt szkriptet adtam a képhez a három ablaktábla azonosításához - ezeket nem fogja látni a példájában.

Fontos, hogy láthassa a Projektpanelt a VB szerkesztőben. Ha a VB szerkesztő nézete nem tartalmazza a projekt ablaktáblát, akkor nyomja meg a Ctrl + R billentyűkombinációt a Projekt panel megjelenítéséhez. Vagy kattintson az alábbi eszköztár ikonra:

A projekt ablaktábla minden megnyitott Excel munkafüzet és minden telepített bővítmény projektjét megjeleníti. Kattintson a munkafüzet neve melletti szürke pluszra a munkafüzet projektjének kibontásához. Ezután kattintson a szürke pluszra a Microsoft Excel Objects mappa mellett az objektum mappa kibontásához. Most minden munkalapra egy bejegyzést és egy Ezt a munkafüzetet kell látnia.

Kattintson a jobb gombbal a ThisWorkbook bejegyzésére, és válassza az előugró menü Kód megtekintése lehetőséget.

Most valószínűleg egy nagy üres fehér kód ablaktáblája veszi fel a képernyő jobb oldalát. A kódtábla tetején két legördülő menü található: (Általános) és (Nyilatkozatok).

  • A bal oldali legördülő menüből válassza a Munkafüzet lehetőséget.
  • A jobb oldali legördülő menüben a munkafüzettel társított összes programozható esemény szerepel. Vannak olyan események, amelyek a munkafüzet megnyitásakor, aktiválásakor, deaktiválásakor stb. Futtatják a kódot. Ma kódot akarunk írni a BeforePrint eseménybe, ezért a jobb legördülő menüből válassza a BeforePrint parancsot.

Ne feledje, hogy minden alkalommal, amikor kiválaszt valamit a jobb oldali legördülő menüből, a VBA szerkesztő beírja a kód elejét és végét a kód modulba. Amikor először módosítja a bal oldali legördülő listát Munkafüzetre, valószínűleg alapértelmezés szerint megkapta a Workbook_Open alprogram kezdeteit. Ha nem a Workbook_Open eljárást írja, fontolja meg az üres eljárás törlését.

Most pedig a VBA kód megírásával. Van néhány hasznos változó, amelyeket használhat.

  • Az ActiveWorkbook.Path visszaadja a munkafüzet elérési útját. Úgy nézhet ki, mint "C: My Documents MrExcel".
  • Az ActiveWorkbook.FullName visszaadja a munkafüzet elérési útját és fájlnevét. Úgy nézhet ki, mint "C: My Documents MrExcel Tip055 Sample.xls".

Ezt a változót a következő 6 pozíció egyikében rendelheti hozzá:

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

Itt van három lehetséges makróminta.

Ehhez a makróhoz az elérési út és a fájlnév az aktív munkalap jobb lábléceként kerül hozzáadásra:

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

Ehhez a makróhoz az elérési út hozzá lesz adva az 1. munkalap bal fejléceként és a 2. munkalap középső lábléceként:

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

Ha nyomtatáskor inkább az "Teljes munkafüzet" opciót használja, ez a verzió a teljes nevet középső láblécként adja hozzá az összes laphoz:

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

Kövesse ezeket a példákat, vagy hozzon létre egyet. Ha végzett, zárja be a VBA szerkesztőt a Fájl> Bezárás és visszatérés a Microsoft Excel programba.

Bármikor, amikor nyomtat egy munkalapot, a kód lefut, és beilleszti az aktuális elérési utat a VBA-kódban megadott megfelelő fejlécbe vagy láblécbe.

Néhány megjegyzés és figyelmeztetés:

  • A kezdő Excel-felhasználók alig fogják tudni, hogy ez a kód szerepel a munkafüzetben. A munkafüzet megnyitásakor előfordulhat, hogy biztonsági figyelmeztetést kap arra, hogy a fájl makrókat tartalmaz, de nem lesz figyelmeztetés, amikor a VBA-kód feldobja azt, ami középső láblécként volt, és oda helyezi az útvonalnevet. Ez gyomorégéshez vezethet. Képzelje el, hogy 5 év múlva valaki használja a munkafüzetét, és az új menedzser azt akarja, hogy a fájlnév a középső láblécről a jobb láblécre kerüljön. Ez a személy tudhatja, hogy manuálisan módosítja a beállításokat a Fájl> Oldalbeállítások menüpontban, de ha nem tudják, hogy a kód megvan, akkor ez battyúba lendíti őket, mivel a kód folyamatosan változtatja a láblécüket.

    It is really unlikely that they will be able to find your code module, but just in case they do, you might want to leave a comment in the code module that directs them back to this website for an explanation.

    You also might want to add a comment to cell A1 reminding yourself that there is an event handler set up to change the print headers.

  • There is a setting within VBA which prevents events from running. If your macro suddenly stops working, t is common to find that something within VBA has turned this setting to prevent the events from running. The common scenario is that a programmer starts a macro with:

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

    Ha hiba történik a makróban, az eseményeket soha nem kapcsolják be újra. Amikor ez megtörténik, kevés a figyelmeztetés. Ha gyanítja, hogy az eseménykezelőket nem hajtják végre, lépjen a visual basic szerkesztőhöz. Az azonnali ablaktábla megjelenítéséhez nyomja meg a Ctrl + g billentyűkombinációt. A közvetlen ablaktáblába írja be:

    Print Application.EnableEvents

    és nyomja meg az Enter billentyűt. Ha úgy találja, hogy ez Hamis értékre van állítva, írja be a következő sort a közvetlen ablaktáblába:

    Application.EnableEvents = True

    és nyomja meg az Enter billentyűt.

Köszönet Donnának a remek kérdésért. A válasz elmagyarázása során nagyszerű alkalom nyílt kibővíteni az Eseménykezelők koncepcióját a VBA-ban.

érdekes cikkek...