Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1152to1156
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

PrintOut und Kopf- & Fußzeilen in VBA

PrintOut und Kopf- & Fußzeilen in VBA
bert
Hallo Leute,
ich habe ein etwas eigenartiges Problem.
Ich verändere die Kopf- & Fußzeilen mittels VBA, um diese Daten immer so anzuzeigen.
Im Normalbetrieb (Seitenansicht und Einzelseitendruck) geht es ohne Probleme mit der Sub:
  • 
    Private Sub Workbook_BeforePrint(Cancel As Boolean)
    On Error GoTo fehler:
    Dim wsSheet As Worksheet
    With ActiveSheet.PageSetup
    .LeftHeader = "Text 1…"
    .CenterHeader = "Text 2 …"
    .RightHeader = "&D"   'Datum
    .RightFooter = "Tabelle: &A"
    End With
    Exit Sub
    fehler:
    'für Fehler alter Versionen
    Resume Next
    End Sub
    

  • Nun will ich viele Tabellen drucken (eine Tabelle wird mit Werten gefüllt und soll dann gedruckt werden, wenn der Nutzer will)
    Wenn ich diese Tabelle in einem Makro mit
    Worksheets("Daten").PrintOut
    ausdrucken will, bringt er alles durcheinander: Kopf rechts kommt nach links, Mitte-Kopf kommt nach unten, teilweise wird es durchgestrichen…
    Ich habe auch schon mit Warteschleifen und mit Application.Wait (Now + TimeValue("0:00:05")) alles etwas verlangsamt, aber ohne Erfolg.
    Hat jemand eine Idee, woran das liegen kann oder wie man das umgehen kann?

    3
    Beiträge zum Forumthread
    Beiträge zu diesem Forumthread

    Betreff
    Benutzer
    Anzeige
    AW: PrintOut und Kopf- & Fußzeilen in VBA
    05.05.2010 13:23:18
    fcs
    Hallo bert,
    das Durcheinander der verschiedenen Kopf-/Fusszeilen-Elemente kann ich nicht nachvollziehen.
    Wenn ein/mehrere Blätter per Makro gedruckt werden oder wenn gruppierte Blätter gedruckt werden, dann wird bei deinem Makro nur im aktiven Blatt die Kopf-/Fusszeile angepasst.
    Damit alle Blätter erfasst werden muss du etwas umbauen. Du benötigst eine separate Prozedur zum Einrichten der Seiten. Diese muss dann vor dem Drucken in den Druckmakros aufgerufen werden und in der Before_Print-Prozedur. In der Befor_Print-Prozedur müssen zusätzlich die Namen selektierten Blätter aufbereitet werden, um auch bei gruppierten Blätter alle Kopf-/Fusszeilen zu aktualisieren.
    Gruß
    Franz
    '### Code in einem allgemeinen Modul ###
    'Erstellt unter Excel 2007
    Option Explicit
    Sub aaSeitenvorschau()
    'Seitenvorschau direkt aus Makro - mehrere Blätter
    SeiteEinrichten (Array("Daten", "Tabelle3"))
    Worksheets(Array("Daten", "Tabelle3")).PrintPreview
    End Sub
    Sub aaDrucken()
    'Drucken direkt aus Makro - ein Blatt
    SeiteEinrichten (Array("Daten"))
    Worksheets(Array("Daten")).PrintOut
    End Sub
    Public Sub SeiteEinrichten(arrSheets)
    Dim iSheet As Long
    On Error Resume Next
    For iSheet = LBound(arrSheets) To UBound(arrSheets)
    With Sheets(arrSheets(iSheet)).PageSetup
    .LeftHeader = "Text 1…"
    .CenterHeader = "Text 2 …"
    .RightHeader = "&D"   'Datum
    .RightFooter = "Tabelle: &A"
    End With
    Next
    End Sub
    '### Code in DieseArbeitsmappe   ###
    Option Explicit
    Private Sub Workbook_BeforePrint(Cancel As Boolean)
    Dim arrBlatt(), intI As Long, oSheet As Object
    On Error GoTo fehler:
    'selektierte Blattnamen in einem Array erfassen
    For Each oSheet In ActiveWindow.SelectedSheets
    intI = intI + 1
    ReDim Preserve arrBlatt(1 To intI)
    arrBlatt(intI) = oSheet.Name
    Next
    Call SeiteEinrichten(arrSheets:=arrBlatt)
    Exit Sub
    fehler:
    'für Fehler alter Versionen
    Resume Next
    End Sub
    

    Anzeige
    AW: PrintOut und Kopf- & Fußzeilen in VBA
    06.05.2010 08:25:41
    bert
    Hallo Franz,
    vielen Dank für die Antwort. Ich habe den Code in einer leeren Datei unter Excel 2003 getestet: ohne Probleme. Dann habe ich den Code in meine Anwendung gebracht und der gleiche Fehler tritt wieder auf.
    Dazu muss man sagen: ich arbeite nur mit einer Datenseite (Tabelle), welche aus einer anderen Tabelle die Daten erhält, also immer wieder neu befüllt wird (eigentlich wie eine Datenbank). Diese Datenseite wird eigentlich mit immer einzeln gefüllt - bearbeitet - gespeichert - (gedruckt).
    Wenn alle Daten fertig sind, sollen alle ausgedruckt werden - und das eben mit dem Makro. Und dabei kommen die Angaben durcheinander.
    Ich werde das auch mal unter Version 2007 testen, vielleicht ist es ja auch ein Problem von 2003.
    Vielen Dank
    Gruß bert
    Anzeige
    AW: PrintOut und Kopf- & Fußzeilen in VBA
    06.05.2010 11:05:24
    fcs
    Hallo bert,
    die Tatsache, dass die Prozeduren in einer leeren Datei funktionieren und in deiner Originaldatei nicht, deutet darauf hin, dass während des Druckvorgangs noch irgendwelche anderen Sachen passieren, die den Ablauf stören.
    Ich konnte jetzt unter Excel 2003 übrigens das von dir beobachtete Choas reproduzieren. Bei dem Versuch, das gleiche Blatt in einer For-Next-Schleife mit unterschiedlichen Daten zu drucken, wurden die Kopf-/Fusstexte auf die verschiedensten Arten verunstaltet.
    Ich hab die Makros nochmals umgebaut. So wird beim Drucken per Makro die BeforePrint-Anweisung übersprungen. In jedem Makro in dem die Seitenvorschau oder das Drucken gestartet wird, muss dann eine als Public deklarierte Variable vor dem Drucken gesetzt werden und nach dem Drucken zurückgesetzt werden.
    Gruß
    Franz
    '### Code in einem allgemeinen Modul ###
    Public bolDruckenmakro As Boolean
    Option Explicit
    'Beispielmakros Drucken/Seitenvorschau
    Sub aaSeitenvorschau()
    'Seitenvorschau direkt aus Makro - mehrere Blätter
    bolDruckenmakro = True
    SeiteEinrichten (Array("Daten", "Tabelle3"))
    Worksheets(Array("Daten", "Tabelle3")).PrintPreview
    bolDruckenmakro = False
    End Sub
    Sub aaDrucken()
    'Drucken direkt aus Makro - ein Blatt
    bolDruckenmakro = True
    SeiteEinrichten (Array("Daten"))
    Worksheets(Array("Daten")).PrintOut
    bolDruckenmakro = False
    End Sub
    Sub aaaVorschauTab3()
    'Druckvorschau direkt aus Makro - ein Blatt mehrfach mit unterschiedlichen Daten
    Dim Zeile
    bolDruckenmakro = True
    For Zeile = 2 To 8
    Worksheets("Tabelle3").Cells(1, 2) = Worksheets("Daten").Cells(Zeile, 1)
    SeiteEinrichten (Array("Tabelle3"))
    Worksheets(Array("Tabelle3")).PrintPreview
    Next
    bolDruckenmakro = False
    End Sub
    'Makro zum Einrichten der Seiten vor dem Drucken
    Public Sub SeiteEinrichten(arrSheets)
    Dim iSheet As Long, sFootL As String
    On Error Resume Next
    For iSheet = LBound(arrSheets) To UBound(arrSheets)
    With Sheets(arrSheets(iSheet)).PageSetup
    .LeftHeader = "Text 1…"
    .CenterHeader = "Text 2 …"
    .RightHeader = "&D"   'Datum
    .RightFooter = "Tabelle: &A"
    End With
    Next
    End Sub
    'Prozedur in DieseArbeitsmappe
    Private Sub Workbook_BeforePrint(Cancel As Boolean)
    Dim arrBlatt(), intI As Long, oSheet As Object
    On Error GoTo fehler:
    If bolDruckenmakro = False Then
    'selektierte Blattnamen in einem Array erfassen
    For Each oSheet In ActiveWindow.SelectedSheets
    intI = intI + 1
    ReDim Preserve arrBlatt(1 To intI)
    arrBlatt(intI) = oSheet.Name
    Next
    Call SeiteEinrichten(arrSheets:=arrBlatt)
    End If
    Exit Sub
    fehler:
    'für Fehler alter Versionen
    Resume Next
    End Sub
    

    Anzeige

    302 Forumthreads zu ähnlichen Themen

    Anzeige
    Anzeige
    Anzeige

    Beliebteste Forumthreads (12 Monate)

    Anzeige

    Beliebteste Forumthreads (12 Monate)

    Anzeige
    Anzeige
    Anzeige