Begivenhedsmakro til ændring af Excel-overskrift - Excel-tip

Indholdsfortegnelse

Donna fra Missouri spurgte:

Har du nogen idé om, hvordan jeg kan få den sti, hvor dokumentet er arkiveret, angivet i sidehovedet eller sidefoden - eller hvor som helst i dokumentet. Jeg kan få filnavnet ind med & f, men jeg kan ikke finde ud af, hvordan jeg gør stien.

Først og fremmest forstår jeg, at Microsoft har føjet denne funktionalitet til Excel XP, og jeg tilbyder kudos til dem, da det er et ofte stillet problem. Alle læsere, der allerede har opgraderet til Office XP, har ikke brug for teknikkerne i denne uges tip til at løse dette problem, men de vil stadig være nyttige til at løse andre problemer.

Løsningen på dette tip er en speciel type makro kaldet en begivenhedshåndteringsmakro. Vi vil kort tage kontrol over Excel, hver gang det er ved at udskrive vores projektmappe og tilføje den aktuelle sti til overskriften.

Mange Excel-brugere har pludret med at optage enkle makroer. Makroerne er gemt i et modul kaldet Module1 eller Module2 og bliver en del af dit projekt. I dag skal jeg diskutere begivenhedshåndteringsmakroer. Disse makroer findes på et specielt kodemodul, der er knyttet til hvert regneark eller projektmappe.

Tidligere tip såsom Enter Excel Time Without the Colon tip har behandlet begivenheden Worksheet_Change. Dagens tip kræver, at vi tilføjer noget kode til projektmappens BeforePrint-begivenhed.

Kode, der føjes til en begivenhed, køres, når denne begivenhed "fyres". I dette tilfælde, når som helst Excel-projektmappen udskrives, før udskrivningen starter, vender Excel kontrol over til VBA-koden og tillader, at alt, hvad du kan angive i VBA-kode, automatisk sker før udskrivning.

Jeg antager, at du er ny i begivenhedshåndteringsmakroer. Jeg skal gennemgå nøjagtigt, hvordan jeg kommer til det rigtige sted for at komme ind i denne makro.

Jeg har en projektmappe kaldet 'Tip055 Sample.xls'. Med projektmappen indlæst i Excel, skal jeg trykke på alt = "" + F11 for at starte med visuel grundlæggende editor. Editorens standardudseende er som vist til højre. Til venstre ser du normalt en projektrude stablet oven på en egenskabsrude. Det meste af højre side af skærmen indeholder en kodefelt. Hvis du ikke har nogen makroer i din projektmappe, bliver din kodefelt grå som vist til højre.

Jeg har tilføjet blå kursiv scriptord til billedet for at identificere de tre ruder - du kan ikke se disse i dit eksempel.

Det er vigtigt, at du kan se projektruden i VB-editoren. Hvis din visning af VB-editoren ikke inkluderer projektruden, skal du trykke på Ctrl + R for at se projektruden. Eller klik på værktøjslinjens ikon vist nedenfor:

Projektruden viser et projekt for hver åben Excel-projektmappe og alle installerede tilføjelsesprogrammer. Klik på det grå plus ud for navnet på din projektmappe for at udvide projektet til din projektmappe. Klik derefter på det grå plus ud for mappen Microsoft Excel Objects for at udvide objektmappen. Du skal nu se en post for hvert regneark og en post kaldet ThisWorkbook.

Højreklik på posten for ThisWorkbook, og vælg Vis kode i pop op-menuen.

Du vil nu sandsynligvis have en stor blank hvid kodepanel, der optager højre side af skærmen. Der er to rullelister øverst i kodefeltet, der siger (Generelt) og (Erklæringer).

  • Vælg Arbejdsbog i venstre rullemenu.
  • Den rigtige rullemenu er nu befolket med alle de programmerbare begivenheder, der er knyttet til projektmappen. Der er begivenheder her, der kører kode, når som helst projektmappen åbnes, aktiveres, deaktiveres osv. I dag vil vi skrive kode i BeforePrint-begivenheden, så vælg BeforePrint fra højre rullemenu.

Bemærk, at hver gang du vælger noget fra den rigtige rullemenu, skriver VBA-editoren begyndelsen og slutningen af ​​kodelinjen i kodemodulet for dig. Første gang du skifter venstre rullemenu til projektmappe, modtog du sandsynligvis begyndelsen på en Workbook_Open-underrutine som standard. Hvis du ikke vil skrive en Workbook_Open-procedure, bør du overveje at slette denne tomme procedure.

Nu til at skrive VBA-koden. Der er et par nyttige variabler, som du kan bruge.

  • ActiveWorkbook.Path returnerer stien til projektmappen. Det kan se ud som "C: My Documents MrExcel".
  • ActiveWorkbook.FullName returnerer stien og filnavnet på projektmappen. Det kan se ud som "C: My Documents MrExcel Tip055 Sample.xls".

Du kan tildele denne variabel til at være en i en af ​​de følgende 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

Her er tre mulige eksempler på makroer.

Denne makro vil have stien og filnavnet tilføjet som højre sidefod på det aktive regneark:

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

Denne makro får stien tilføjet som venstre overskrift på Ark1 og som centerfod på Ark2:

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

Hvis du har tendens til at bruge muligheden "Hele projektmappe" under udskrivning, tilføjer denne version det fulde navn som centerfod til alle ark:

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

Follow one of these examples or create one of your own. When you are finished, close the VBA editor with File> Close and Return to Microsoft Excel.

Anytime that you print a worksheet, the code will run and insert the current path into the appropriate header or footer that you indicated in the VBA code.

Some notes and cautions:

  • Novice Excel users will have little idea that this code is in the workbook. When they open the workbook, they may get the security warning that the file contains macros, but there will be no warning when the VBA code whacks whatever they had as the center footer and puts the pathname there. This can lead to heartburn. Imagine 5 years from now someone is using your workbook and the new manager wants the filename to move from the center footer to the right footer. This person may know to manually change the settings in File> PageSetup, but if they do not know the code is there, it will drive them batty as the code continually changes their footers back.

    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

    Når der opstår en fejl i makroen, tændes begivenhederne aldrig igen. Når dette sker, er der kun lidt advarsel. Hvis du har mistanke om, at dine begivenhedshåndterere ikke udføres, skal du gå til Visual Basic Editor. Tryk på Ctrl + g for at åbne en øjeblikkelig rude. Skriv i den umiddelbare rude:

    Print Application.EnableEvents

    og tryk Enter. Hvis du finder ud af, at dette er indstillet til Falsk, skal du skrive følgende linje i den umiddelbare rude:

    Application.EnableEvents = True

    og tryk Enter.

Tak til Donna for et godt spørgsmål. I processen med at forklare svaret var det en fantastisk mulighed for at udvide begrebet Event Handlers i VBA.

Interessante artikler...