Unsere Webseiten benötigen JavaScript. Dies scheint in Ihrem Browser jedoch deaktiviert zu sein.

News & Tipps zu Microsoft Excel

Lesen Sie hier einige der besten Beiträge aus SmartTools Excel Weekly sowie ausgewählte Inhalte anderer E-Mail-Newsletter von SmartTools Publishing rund um Microsoft Excel.

Beitrag aus SmartTools Excel Weekly

Kopfzeilen beim Ausdruck mehrerer Tabellenblätter dynamisch füllen

Excel 365 2024 2021 2019 2016 2013

FRAGE Ich habe noch eine Frage zu Ihrer Makrolösung, die beim Drucken eines Tabellenblatts den Inhalt einer Tabellenzelle in die Kopfzeile übernimmt: Der Code funktioniert nur beim Drucken des jeweils angegebenen Tabellenblatts. Ich habe aber mehrere Tabellenblätter, die ich gemeinsam drucken möchte. In diesem Fall sollen die Kopfzeilen aller Blätter dynamisch mit Zellinhalten gefüllt werden. Ist das auch möglich?

K. Schütz

ANTWORT Das Makro, das wir seinerzeit vorgestellt hatten, lässt sich problemlos dahingehend erweitern, dass die Kopfzeilen mehrerer Tabellenblätter dynamisch mit Zellinhalten befüllt werden.

Wenn Sie zum Beispiel eine Arbeitsmappe mit den drei Tabellenblättern "Rechnung", "Angebot" und "Lieferschein" haben und möchten, dass im linken Bereich der Kopfzeile der Inhalt aus Zelle C12 des jeweiligen Tabellenblatts steht, passen Sie die Makrolösung folgendermaßen an:

  1. Wechseln Sie aus Ihrer Excel-Arbeitsmappe mit Alt + F11 in die Entwicklungsumgebung.
  2. Doppelklicken Sie im Projekt-Explorer auf das Modul "DieseArbeitsmappe" der aktuellen Datei.
  3. Im zugehörigen Codefenster wählen Sie aus den Dropdownfeldern wieder "Workbook" und "BeforePrint" aus.
  4. Die entsprechende Ereignisprozedur füllen Sie nun mit folgendem VBA-Code:
Private Sub Workbook_BeforePrint(Cancel As Boolean)
Dim shPrintSheet As Worksheet
Dim objPgSetup As PageSetup
Dim strSheets As String
Dim arrSheetNames() As String
Dim strHdrText As String
Dim i As Long

  On Error GoTo Header_End

  strSheets = "Rechnung,Angebot,Lieferschein"
  arrSheetNames = Split(strSheets, ",")

  For i = 0 To 2
    Set shPrintSheet = ThisWorkbook.Sheets(arrSheetNames(i))

    strHdrText = shPrintSheet.Range("C12").Text

    Set objPgSetup = shPrintSheet.PageSetup
    objPgSetup.LeftHeader = strHdrText
  Next i

Header_End:
  Set objPgSetup = Nothing
  Set shPrintSheet = Nothing
  Exit Sub
End Sub

Die Namen der Tabellenblätter geben Sie als kommagetrennte Liste ein und übergeben sie der Variablen "strSheets". Mit einer Split-Funktion teilen Sie die Liste in die einzelnen Namen auf und erstellen daraus das Array "arrSheetNames", das in diesem Fall aus den drei Tabellennamen besteht.

In der For-Schleife bearbeiten Sie dann jedes Array-Element (Arrays sind Null-basiert, deshalb eine Schleife von 0 bis 2), um die Kopfzeile für jedes Tabellenblatt aus der Namensliste mit dem Inhalt aus Zelle C12 zu befüllen.

So werden die Kopfzeilen der Tabellenblätter bei jedem Druckvorgang automatisch aktualisiert.

Aber vielleicht wollen Sie gar nicht den Zellinhalt aus dem jeweiligen Tabellenblatt in die Kopfzeile übernehmen, sondern nur den Inhalt einer ganz bestimmten Zelle in einem ganz bestimmten Blatt. Womöglich soll im Beispiel der Inhalt aus Zelle C12 des Blatts "Rechnung" in den Kopfzeilen aller Tabellenblätter erscheinen.

Das erreichen Sie mit einer kleinen Anpassung des Makros. Dabei bestimmen Sie den gewünschten Kopfzeilentext, bevor Sie die For-Schleife ausführen:

Private Sub Workbook_BeforePrint(Cancel As Boolean)
Dim shPrintSheet As Worksheet
Dim objPgSetup As PageSetup
Dim strSheets As String
Dim arrSheetNames() As String
Dim strHdrText As String
Dim i As Long

  On Error GoTo Header_End

  Set shPrintSheet = ThisWorkbook.Sheets("Rechnung")
  strHdrText = shPrintSheet.Range("C12").Text

  strSheets = "Rechnung,Angebot,Lieferschein"
  arrSheetNames = Split(strSheets, ",")

  For i = 0 To 2
    Set shPrintSheet = ThisWorkbook.Sheets(arrSheetNames(i))

    Set objPgSetup = shPrintSheet.PageSetup
    objPgSetup.LeftHeader = strHdrText
  Next i

Header_End:
  Set objPgSetup = Nothing
  Set shPrintSheet = Nothing
  Exit Sub
End Sub