Hendelsesmakro for å endre Excel-topptekst - Excel-tips

Innholdsfortegnelse

Donna fra Missouri spurte:

Har du noen anelse om hvordan jeg kan få banen der dokumentet er arkivert, angitt i topptekst eller bunntekst - eller hvor som helst i dokumentet. Jeg kan få filnavnet inn med & f, men jeg klarer ikke å finne ut hvordan jeg skal gjøre banen.

Først og fremst forstår jeg at Microsoft har lagt til denne funksjonaliteten i Excel XP, og jeg tilbyr kudos til dem, da det er et ofte spurt problem. Alle lesere som allerede har oppgradert til Office XP, trenger ikke teknikkene i ukens tips for å løse dette problemet, men de vil fortsatt være nyttige for å løse andre problemer.

Løsningen på dette tipset er en spesiell type makro som kalles en hendelsesbehandlingsmakro. Vi skal kort ta kontroll over Excel hver gang det er i ferd med å skrive ut arbeidsboken vår og legge til den nåværende banen til overskriften.

Mange Excel-brukere har dabbled i opptak enkle makroer. Makroene lagres i en modul kalt Module1 eller Module2 og blir en del av prosjektet ditt. I dag skal jeg diskutere makroer for hendelsesbehandlere. Disse makroene ligger på en spesiell kodemodul som er tilknyttet hvert regneark eller arbeidsbok.

Tidligere tips som Enter Excel Time Without the Colon tip har behandlet Worksheet_Change-hendelsen. Dagens tips krever at vi legger til litt kode i arbeidsbokens BeforePrint-hendelse.

Kode som legges til en hendelse, vil kjøres når den hendelsen blir "sparket". I dette tilfellet, når som helst når Excel-arbeidsboken skrives ut, før utskriften starter, overfører Excel kontrollen til VBA-koden og lar alt du kan spesifisere i VBA-koden automatisk skje før utskrift.

Jeg kommer til å anta at du er ny i makroer for hendelsesbehandlere. Jeg skal gå nøyaktig gjennom hvordan jeg kommer til rett sted for å komme inn i denne makroen.

Jeg har en arbeidsbok kalt 'Tip055 Sample.xls'. Med arbeidsboken lastet i Excel, skal jeg trykke alt = "" + F11 for å begynne å visual basic editor. Standardutseendet til redaktøren er som vist til høyre. Til venstre ser du vanligvis en prosjektrute stablet på toppen av en Egenskaps-rute. Det meste av høyre side av skjermen inneholder et kodefelt. Hvis du ikke har noen makroer i arbeidsboken, vil kodefeltet være grått som vist til høyre.

Jeg har lagt til blå kursiv skriftord i bildet for å identifisere de tre rutene - du vil ikke se disse i eksemplet ditt.

Det er viktig at du kan se prosjektruten i VB-redigereren. Hvis visningen din av VB-redigereren ikke inkluderer prosjektruten, trykk Ctrl + R for å se prosjektruten. Eller klikk på verktøylinjeikonet vist nedenfor:

Prosjektruten viser et prosjekt for hver åpne Excel-arbeidsbok og alle installerte tillegg. Klikk på det grå pluss ved siden av arbeidsboken for å utvide prosjektet for arbeidsboken. Klikk deretter på det grå pluss ved siden av mappen Microsoft Excel Objects for å utvide objektmappen. Du bør nå se en oppføring for hvert regneark og en oppføring som heter ThisWorkbook.

Høyreklikk oppføringen for ThisWorkbook og velg View Code fra lokalmenyen.

Du vil nå sannsynligvis ha en stor tom hvit kodefelt som tar opp høyre side av skjermen. Det er to nedtrekksvinduer øverst i kodefeltet som vil si (Generelt) og (Erklæringer).

  • Velg Arbeidsbok fra venstre rullegardin.
  • Den høyre rullegardinmenyen er nå fylt med alle de programmerbare hendelsene som er knyttet til arbeidsboken. Det er hendelser her som vil kjøre kode når som helst arbeidsboken åpnes, aktiveres, deaktiveres osv. I dag vil vi skrive kode i BeforePrint-hendelsen, så velg BeforePrint fra høyre rullegardin.

Vær oppmerksom på at hver gang du velger noe fra høyre rullegardin, skriver VBA-editoren begynnelsen og sluttlinjen med kode i kodemodulen for deg. Første gang du endrer venstre rullegardin til Arbeidsbok, mottok du sannsynligvis begynnelsen på en Arbeidsbok_Open subrutine som standard. Hvis du ikke skal skrive en Workbook_Open-prosedyre, bør du vurdere å slette denne tomme prosedyren.

Nå, for å skrive VBA-koden. Det er et par nyttige variabler du kan bruke.

  • ActiveWorkbook.Path vil returnere banen til arbeidsboken. Det kan se ut som "C: My Documents MrExcel".
  • ActiveWorkbook.FullName returnerer banen og filnavnet til arbeidsboken. Det kan se ut som "C: My Documents MrExcel Tip055 Sample.xls".

Du kan tilordne denne variabelen til å være en i en av de følgende 6 posisjonene:

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 makroen vil ha banen og filnavnet lagt til som høyre bunntekst i det aktive regnearket:

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

Denne makroen vil ha banen lagt til som den venstre overskriften på Ark1 og som midtfoten 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 pleier å bruke alternativet "Hele arbeidsboken" når du skriver ut, vil denne versjonen legge til det fulle navnet som midtfot på alle ark:

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

Følg ett av disse eksemplene, eller lag et av dine egne. Når du er ferdig, lukker du VBA-editoren med File> Close and Return to Microsoft Excel.

Hver gang du skriver ut et regneark, kjører koden og setter inn den nåværende banen i riktig topptekst eller bunntekst som du angav i VBA-koden.

Noen merknader og advarsler:

  • Nybegynnere av Excel-brukere vil ikke ha noen ide om at denne koden er i arbeidsboken. Når de åpner arbeidsboken, kan de få sikkerhetsadvarselen om at filen inneholder makroer, men det vil ikke være noen advarsel når VBA-koden slår hva de hadde som midtfot og setter stienavnet der. Dette kan føre til halsbrann. Tenk deg om fem år fra nå, bruker noen arbeidsboken din, og den nye lederen vil at filnavnet skal flytte fra midtre bunntekst til høyre bunntekst. Denne personen kan vite om manuelt å endre innstillingene i File> PageSetup, men hvis de ikke vet at koden er der, vil det føre til at de blir slitsomme når koden kontinuerlig endrer bunnfoten.

    Det er usannsynlig at de vil kunne finne kodemodulen din, men i tilfelle de gjør det, vil du kanskje legge igjen en kommentar i kodemodulen som leder dem tilbake til dette nettstedet for en forklaring.

    Det kan også være lurt å legge til en kommentar til celle A1 og minne deg selv på at det er konfigurert en hendelsesbehandler for å endre skrivehodene.

  • Det er en innstilling i VBA som forhindrer at hendelser kjører. Hvis makroen din plutselig slutter å virke, er det vanlig å finne ut at noe i VBA har slått denne innstillingen for å forhindre at hendelsene kjører. Det vanlige scenariet er at en programmerer starter en makro med:

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

    Når det oppstår en feil i makroen, blir hendelsene aldri slått på igjen. Når dette skjer, er det lite advarsel. Hvis du mistenker at hendelsesbehandlerne ikke blir henrettet, kan du gå til Visual Basic Editor. Trykk på Ctrl + g for å få opp en umiddelbar rute. I den umiddelbare ruten skriver du inn:

    Print Application.EnableEvents

    og trykk enter. Hvis du finner ut at dette er satt til Falsk, skriver du inn følgende linje i den umiddelbare ruten:

    Application.EnableEvents = True

    og trykk enter.

Takk til Donna for et flott spørsmål. I prosessen med å forklare svaret var det en flott mulighet til å utvide konseptet Event Handlers i VBA.

Interessante artikler...