Händelsemakro för att ändra Excel-rubrik - Excel-tips

Innehållsförteckning

Donna från Missouri frågade:

Har du någon aning om hur jag kan få den sökväg där dokumentet arkiveras anges i sidhuvudet eller sidfoten - eller var som helst i dokumentet. Jag kan hämta filnamnet med & f men jag kan inte ta reda på hur jag gör vägen.

Först och främst förstår jag att Microsoft har lagt till denna funktionalitet i Excel XP och jag erbjuder kudos till dem eftersom det är ett vanligt problem. Alla läsare som redan har uppgraderat till Office XP behöver inte teknikerna i veckans tips för att lösa detta problem, men de kommer fortfarande att vara användbara för att lösa andra problem.

Lösningen på detta tips är en speciell typ av makro som kallas ett händelsehanteringsmakro. Vi ska kort ta kontroll över Excel varje gång det är på väg att skriva ut vår arbetsbok och lägga till den aktuella sökvägen till rubriken.

Många Excel-användare har tagit sig in i inspelningen av enkla makron. Makron lagras i en modul som heter Module1 eller Module2 och blir en del av ditt projekt. Idag ska jag diskutera makron för händelsehanterare. Dessa makron finns på en speciell kodmodul som är associerad med varje kalkylblad eller arbetsbok.

Tidigare tips som Enter Enter Excel Time Without the Colon tip har behandlat händelsen Worksheet_Change. Dagens tips kräver att vi lägger till lite kod i arbetsbokens BeforePrint-händelse.

Kod som läggs till i en händelse körs när den händelsen "avfyras". I det här fallet, närhelst Excel-arbetsboken skrivs ut, innan utskriften startar, övergår Excel kontrollen till VBA-koden och låter allt du kan ange i VBA-koden automatiskt ske före utskrift.

Jag kommer att anta att du är ny i händelsehanteringsmakron. Jag ska gå igenom exakt hur man kommer till rätt plats för att komma in i detta makro.

Jag har en arbetsbok som heter 'Tip055 Sample.xls'. Med arbetsboken laddad i Excel kommer jag att trycka på alt = "" + F11 för att börja med Visual Basic Editor. Redaktörens standardutseende är som visas till höger. Till vänster ser du vanligtvis en projektruta staplad ovanpå en Egenskapsruta. Det mesta av skärmens högra sida innehåller en kodruta. Om du inte har några makron i din arbetsbok blir kodfönstret grå som visas till höger.

Jag har lagt till blå kursiva skriptord i bilden för att identifiera de tre rutorna - du kommer inte att se dessa i ditt exempel.

Det är viktigt att du kan se projektfönstret i VB-redigeraren. Om din syn på VB-redigeraren inte inkluderar projektrutan, tryck sedan på Ctrl + R för att visa projektrutan. Eller klicka på verktygsfältikonen som visas nedan:

Projektfönstret visar ett projekt för varje öppen Excel-arbetsbok och varje installerat tillägg. Klicka på det grå pluset bredvid namnet på din arbetsbok för att expandera projektet för din arbetsbok. Klicka sedan på det grå pluset bredvid mappen Microsoft Excel Objects för att expandera objektmappen. Du bör nu se en post för varje kalkylblad och en post som heter ThisWorkbook.

Högerklicka på posten för ThisWorkbook och välj Visa kod i popup-menyn.

Du kommer förmodligen att ha en stor tom vit kodruta som tar upp den högra sidan av skärmen. Det finns två rullgardinsmenyer högst upp i kodfönstret som säger (Allmänt) och (Deklarationer).

  • I arbetslistan till vänster väljer du Arbetsbok.
  • Den högra rullgardinsmenyn är nu fylld med alla programmerbara händelser associerade med arbetsboken. Det finns händelser här som kommer att köra kod när arbetsboken öppnas, aktiveras, inaktiveras etc. Idag vill vi skriva kod i händelsen BeforePrint, så välj BeforePrint från höger rullgardinsmeny.

Observera att varje gång du väljer något från den högra rullgardinsmenyn, skriver VBA-redigeraren början och slutraden med kod i kodmodulen åt dig. Första gången du ändrar den vänstra rullgardinsmenyn till Arbetsbok fick du antagligen början på en arbetsbok_Öppen underrutin som standard. Om du inte ska skriva en Workbook_Open-procedur bör du överväga att ta bort den här tomma proceduren.

Nu för att skriva VBA-koden. Det finns ett par användbara variabler som du kan använda.

  • ActiveWorkbook.Path returnerar sökvägen till arbetsboken. Det kan se ut som "C: My Documents MrExcel".
  • ActiveWorkbook.FullName returnerar sökboken och filnamnet för arbetsboken. Det kan se ut som "C: My Documents MrExcel Tip055 Sample.xls".

Du kan tilldela denna variabel att vara en av följande 6 positioner:

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

Här är tre möjliga exempelmakron.

Detta makro kommer att lägga till sökvägen och filnamnet som det högra sidfoten i det aktiva kalkylbladet:

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

I detta makro läggs banan till som vänster sidhuvud för Sheet1 och som mittfot för Sheet2:

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

Om du brukar använda alternativet "Hela arbetsboken" när du skriver ut, kommer den här versionen att lägga till det fullständiga namnet som mittfot på alla ark:

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

Följ ett av dessa exempel eller skapa ett eget. När du är klar stänger du VBA-redigeraren med Arkiv> Stäng och återgår till Microsoft Excel.

Varje gång du skriver ut ett kalkylark körs koden och infogar den aktuella sökvägen i rätt sidhuvud eller sidfot som du angav i VBA-koden.

Några anteckningar och varningar:

  • Nybörjare av Excel-användare har ingen aning om att den här koden finns i arbetsboken. När de öppnar arbetsboken kan de få säkerhetsvarningen om att filen innehåller makron, men det kommer ingen varning när VBA-koden slår vad de hade som mittfot och sätter sökvägen där. Detta kan leda till halsbränna. Tänk dig om fem år från och med nu använder någon din arbetsbok och den nya chefen vill att filnamnet ska flyttas från mittfot till högerfot. Den här personen kanske vet att manuellt ändra inställningarna i File> PageSetup, men om de inte vet att koden finns där, kommer den att kämpa dem då koden kontinuerligt byter fotfot.

    Det är verkligen osannolikt att de kommer att kunna hitta din kodmodul, men om de gör det kanske du vill lämna en kommentar i kodmodulen som leder dem tillbaka till den här webbplatsen för en förklaring.

    Du kanske också vill lägga till en kommentar till cell A1 som påminner dig själv om att det finns en händelsehanterare inställd för att ändra skrivhuvuden.

  • Det finns en inställning inom VBA som förhindrar att händelser körs. Om ditt makro plötsligt slutar fungera är det vanligt att något inom VBA har vänt den här inställningen för att förhindra att händelserna körs. Det vanliga scenariot är att en programmerare startar ett makro med:

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

    När ett fel inträffar i makrot slås händelserna aldrig på igen. När detta händer är det lite varning. Om du misstänker att dina eventhanterare inte körs, gå till Visual Basic Editor. Tryck på Ctrl + g för att öppna en omedelbar ruta. I den omedelbara rutan skriver du:

    Print Application.EnableEvents

    och tryck Enter. Om du upptäcker att detta är inställt på Falskt skriver du följande rad i den omedelbara rutan:

    Application.EnableEvents = True

    och tryck Enter.

Tack till Donna för en fantastisk fråga. Under processen att förklara svaret var det ett fantastiskt tillfälle att utöka konceptet Event Handlers i VBA.

Intressanta artiklar...