Sidehoved/-fod ved udskrift

Jeg har tidligere beskæftiget mig med hændelsen BeforePrint. Det gør jeg også her, i denne artikel for at styre sidehoved/-fod i forbindelse med udskrift (men også andre hændelser kan selvfølgelig bruges). Ønsker man at sidehoved/-fod gennem en makro, så der altid står noget bestemt, og ikke det brugerne tilfældigvis har skrevet, kan man udnytte Workbook_BeforePrint hændelsen til at styre indholdet af sit sidehoved eller sin sidefod.

Her skal man huske at såvel sidehoved som sidefod har tre sektioner i Excel. Skal man styre helt, hvad der kommer til at stå, skal man adressere dem alle i sin kode.

De seks sektioner hedder LeftHeader, CenterHeader, RightHeader, LeftFooter, CenterFooter og RightFooter. De kan alle  indeholde data (tekst og tal) samt koder, der indsætter forskellige variable værdier, fx sidetal, dato, klokkeslæt mm og billeder. Via VBA kan der også indsættes information fra selve regnearket indsættes i sidehoved eller -fod.

Koderne, der kan bruges til at indsætte felter i sidehoved/-fod i VBA er

Kode i VBA Indsætter feltet Resulterer i
&P &[Side] Et sidetal for den pågældende side
&N &[Sider] Det samlede antal sider i udskriften
&D &[Dato] Dags dato på udskriftstidspunktet
&T &[Klokkeslæt] Klokkeslættet, hvor dokumentet udskrives
&Z &[Sti] Stien, hvor mappen er gemt
&F &[Fil] Filnavnet, som mappen er gemt under
&A &[Ark] Navnet på arkfanen
&G &[Billede] Indsætter et billede*

* Hvilket billede specificeres med et HeaderPicture nøgleord, fx RightHeaderPicture.Filename = ..., se mere nedenfor.

Koderne skal anbringes inde i dobbelte anførselstegn, da de opfattes som tekst, fx

Leftheader = "&P"

skal der stå flere koder, skal de stå i samme anførselstegn, fx

Leftheader = "&P af &N"

Læg mærke til, at også eventuel tekst, her "af" står inde i anførselstegnene uden yderligere anførselstegn.

Skal der hentes indhold ud af en celle til sidehoved eller -fod, kan det gøres fx med Range objektet eller med Cells, fx

Leftheader = Sheets(1).Range("A1").Value eller
Rightfooter = Cells(1,1).Value

eller evt. med Target.Value, hvis hændelsesmakroen har et Target og dette ønskes brugt i stedet for en bestemt celle.

Hele sidehovedet og sidefoden hører til PageSetup nøgleordet. Det betyder, at når der skal sættes flere ting, kan man med fordel gøre det med et With-statement, se mere her: Programmering med objekter. I praksis kan man start med

With ActiveSheet.PageSetup

og så fortsætte derfra. Husk at slutte med End With. Se eksemplet nederst på denne side.

Udover ovenstående kan et sidehoved/sidefod også indeholde specifikationer af skrifttyper og punktstørrelser for de enkelte sektioner. Dette gøres ved at indsætte relevante nøgleord før det egentlige indhold i sektionen.

.LeftFooter = "&""Verdana,Bold""&8Hej jan"

Læg mærke til, at der skal bruges en del flere anførselstegn til skrifttypen og effekten. Der er således separate anførselstegn omkring & samt samlede anførselstegn omkring navnet på skrifttypen (Verdana) og betegnelsen for effekten (fed). Skrifttypenavn og effekt adskilles af et komma.

NB! Af en for mig ukendt grund, kan man sætte effekten med både Normal, Bold og Italic og også de danske betegnelser, Normal, Fed og Kursiv.

Punktstørrelsen sættes med "&?" hvor ? erstattes med et tal der repræsenterer en gyldig punktstørrelse, i eksemplet ovenfor størrelse 8. Denne kode skal stå indenfor samme anførselstegn, som den tekst, der skal have størrelsen.

Skal sidehoved eller -fod indeholde et billede, skal dette identificeres HeaderPicture nøgleord, fx RightHeaderPicture efterfulgt at stien til billedet (i dobbelte anførselstegn):

RightHeaderPicture.Filename = "C:\myheaderpic.jpg"

Skal én eller flere af sektionerne være tomme, bør de sættes til tom, fx med CenterFooter = "". Ellers vil tekst, som af brugeren er skrevet i den pågældende sektion blive stående.

Til sidst skal det hele så samles, som fx i nedenstående eksempel:

Private Sub Workbook_BeforePrint(Cancel As Boolean)
    Application.ScreenUpdating = False
    With ActiveSheet.PageSetup
        .LeftHeader = "&7&A"
        .CenterHeader = ""
        .RightHeaderPicture.Filename = "C:\myfooterpic.jpg"
        .RightHeader = "&G"
        .LeftFooter = ""
        .CenterFooter = "&7&D &T"
        .RightFooter = "&7Side &P af &N"
    End With
    Application.ScreenUpdating = True
End Sub

At sætte sideopsætningen, kan tage nogen tid, og kræve noget "skærmarbejde" af Excel. Derfor er skærmopdateringen slået fra i begyndelsen af koden, og slås til igen til sidst med henholdsvis Application.ScreenUpdating = False og Application.ScreenUpdating = True.

- Til top -
- Tilbage til Programmering -
- Tilbage til makroer -

- Tilbage til Excel -