Weinblog, Reiseblog & Digitalisierung

Excel: Zelleninhalte in Kopfzeile einfügen

Wie kann man in Excel den Inhalt einer oder mehrerer Zellen in die Kopzeile bzw. die Fußzeile einfügen? Dies geht mittels eines kleinen Makros, getestet mit Excel 2003.

Hier gibt es, wie so oft, viele Wege, die zum gewünschten Ergebnis führen. Weiterführendes und Rat lässt sich in einschlägigen Fachforen finden, hier wird nur ein Codebeispiel gezeigt, an welchem man sich entlanghangeln kann.

Allgemeines zu Kopfzeile und Fußzeile
Die Fuß- und Kopfzeilen sind in Excel eingeteilt, in jeweils links, mitte und rechts, was in VB so angesprochen wird:
Fußzeile: LeftFooter bzw. CenterFooter bzw. RightFooter
Kopfzeile: LeftHeader bzw. CenterHeader bzw. RightHeader

Das heißt, in unten aufgeführtem Skript könnt ihr selbst bestimmen, wo eure Zelleninhalte angezeigt werden sollen, indem ihr den entsprechenden Befehl austauscht.

Was heißt "BeforePrint"?
Das Workbook.BeforePrint-Ereignis tritt ein, bevor die Arbeitsmappe (oder ein Teil ihres Inhalts) gedruckt wird. Mehr siehe bei MSDN.

Inhalt einer Zelle (hier: A18) in der mittleren Kopfzeile anzeigen lassen:

Private Sub Workbook_BeforePrint(Cancel As Boolean)

ActiveSheet.PageSetup.CenterHeader = Range("A18").Value

End Sub

Inhalt mehrerer Zellen (hier: A18, B18, A19, B19, A20, B20) in der mittleren Kopfzeile anzeigen lassen:
Vorbemerkung: & heißt, dass ein Wert angefügt wird. Der Wert kann reiner Text sein, der von "" umschlossen ist, z. B. ", " oder der Inhalt einer weiteren Zelle.

Private Sub Workbook_BeforePrint(Cancel As Boolean)
ActiveSheet.PageSetup.CenterHeader = Range("A18").Value & ": " & Range("B18").Value & ", " & Range("A19").Value & ": " & Range("B19").Value & ", " & Range("A20").Value & ": " & Range("B20").Value

End Sub

In dem Beispiel haben wir den Zellbereich von A18 bis B20 in die mittlere Kopfzeile eingefügt und die Zellen noch mit Doppelpunkt, Komma und Leerzeichen voneinander abgetrennt. Es wurde aus diesen Zellen:

diese Kopfzeile, die auf dem Ausdruck oder auch bereits in der Seitenansicht zu sehen ist:

xAktualisierung: 17.11.2010

Steffen fragt in den Kommentaren nach einer abgewandelten Version nach:

Aufgabenstellung:

ich möchte in der Kopfzeile 3 Zeilen von deinem o.g. Beispiel untereinander einfügen, also z.B. Zeile 1 in der Kopfzeile ist der Text von A18,B18,A19,B19 und Zeile 2 in der Kopfzeile ist der Text von A20,B20,A21,B21 und Zeile 3 in der Kopfzeile ist der Text von A22,B22,A23,B23.

So sieht also der Text im Dokument aus, der in 3 Zeilen in die Kopfzeile soll:

Excel Kopfzeile1

Ergebnis:
Den Zeilenumbruch bekommen wir in Visual Basic hier zum Beispiel mit Chr(13) hin. Der Code im VB-Editor sieht dann also so aus:

VB Editor

Private Sub Workbook_BeforePrint(Cancel As Boolean)

ActiveSheet.PageSetup.CenterHeader = Range("A18").Value & ", " & Range("B18").Value & ", " & Range("A19").Value & ", " & Range("B19").Value & Chr(13) & Range("A20").Value & ", " & Range("B20").Value & ", " & Range("A21").Value & ", " & Range("B21").Value & Chr(13) & Range("A22").Value & ", " & Range("B22").Value & ", " & Range("A23").Value & ", " & Range("B23").Value

End Sub

Druckvorschau:

Druckvorschau Excel

Viel Erfolg beim Nachbauen!

Stay blogged. 8-)

Euer Matthias

Kommentare

    • Geschrieben vonSteffen
    • am

    Hallo Matthias,

    danke für den Tipp, hoffe es geht auch mit 2007, werd es nachher gleich mal testen.
    Weißt Du auch ob dies möglich, wenn ja wie sieht dann der code aus?:
    ich möchte in der Kopfzeile 3 Zeilen von deinem o.g. Beispiel untereinander einfügen, also z.B. Zeile 1 in der Kopfzeile ist der Text von A18,B18,A19,B19 und Zeile 2 in der Kopfzeile ist der Text von A20,B20,A21,B21 und Zeile 3 in der Kopfzeile ist der Text von A22,B22,A23,B23.
    Danke vorab für Deine Hilfe Gruß Steffen

    Antwort
    • Geschrieben vonMatthias
    • am

    Hi Steffen,

    gerne. Danke für deine Anfrage. Office 2007 kann ich leider nicht testen.

    Deine Anfrage beantworte ich dir gleich ausführlich oben im Artikel als Aktualisierung mit Bilder.

    Grüße

    Matthias

    Antwort
    • Geschrieben vonMatthias
    • am

    Hi Steffen,
    das ist der Code, ich habe den Artikel oben ergänzt:

    QUOTE:
    Private Sub Workbook_BeforePrint(Cancel As Boolean)

    ActiveSheet.PageSetup.CenterHeader = Range("A18").Value & ", " & Range("B18").Value & ", " & Range("A19").Value & ", " & Range("B19").Value & Chr(13) & Range("A20").Value & ", " & Range("B20").Value & ", " & Range("A21").Value & ", " & Range("B21").Value & Chr(13) & Range("A22").Value & ", " & Range("B22").Value & ", " & Range("A23").Value & ", " & Range("B23").Value

    End Sub

    Ich bin gespannt, ob es mit 2007 auch so geht.

    Antwort
    • Geschrieben vonPablo
    • am

    Hallo Matthias
    Dein Tipp ist mir sehr nützlich, vielen Dank!
    Eine Frage hätte ich: Gibt es eine Möglichkeit die Schriftgrösse (und evtl. auch die Schriftart) im VBA-Script festzulegen? Bei mir erscheint die mit Deinem Scriptmuster erzeugte Fusszeile immer in Arial 10pt.
    Gruss Pablo

    Antwort
    • Geschrieben vonMatthias
    • am

    Hi, das kann so aussehen:


    Private Sub Workbook_BeforePrint(Cancel As Boolean)

    ActiveSheet.PageSetup.CenterHeader = "&""Arial,Bold""&22" & Range("A1").Value

    End Sub

    Antwort
    • Geschrieben vonMBernau
    • am

    Hallo Matthias,

    danke für die ausführliche Erklärung!
    Wäre es auch möglich einen variablen Inhalt einzugeben?
    Z.B. immer er aktuelle Wert aus Spalte B der auf der aktuellen (gedruckten) Seite ganz oben steht?

    Gruß MBernau

    Antwort
    • Geschrieben vonMatthias
    • am

    Hi MBernau,

    ich habe eben etwas rumprobiert konnte aber keine Lösung für deine Frage finden. Bist du schon weiter gekommen?

    Antwort