Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Druckbereich via VBA definieren

Forumthread: Druckbereich via VBA definieren

Druckbereich via VBA definieren
07.03.2013 11:54:39
Ken
Hallo,
ich habe ein Problem woran ich so langsam verzweifel...
Habe ein Excelblatt was mit Daten gefüllt ist die beim Ausdruck im Querformat 2 Seiten beanspruchen. Die Kopfzeile habe ich mit:
Range("7:7").Select
xlApp.ActiveWindow.FreezePanes = True
festgelegt. Ich weiß nur leider nicht wie ich per VBA schreiben soll, dass die zweite Seite auch diesen Kopfbereich am Anfang drucken soll. Mein Printcode sieht bis jetzt so aus:
With ActiveSheet.PageSetup
.LeftHeader = ""
.CenterHeader = ""
.RightHeader = ""
.LeftFooter = ""
.CenterFooter = ""
.RightFooter = ""
.PrintHeadings = False
.PrintGridlines = False
.PrintComments = xlPrintNoComments
.PrintQuality = 600
.CenterHorizontally = False
.CenterVertically = False
.Orientation = xlLandscape
.Draft = False
.PaperSize = xlPaperA4
.FirstPageNumber = xlAutomatic
.Order = xlDownThenOver
.BlackAndWhite = False
.Zoom = False
.FitToPagesWide = 1
.FitToPagesTall = 1
.PrintErrors = xlPrintErrorsDisplayed
.OddAndEvenPagesHeaderFooter = False
.DifferentFirstPageHeaderFooter = False
.ScaleWithDocHeaderFooter = True
.AlignMarginsHeaderFooter = True
.EvenPage.LeftHeader.Text = ""
.EvenPage.CenterHeader.Text = ""
.EvenPage.RightHeader.Text = ""
.EvenPage.LeftFooter.Text = ""
.EvenPage.CenterFooter.Text = ""
.EvenPage.RightFooter.Text = ""
.FirstPage.LeftHeader.Text = ""
.FirstPage.CenterHeader.Text = ""
.FirstPage.RightHeader.Text = ""
.FirstPage.LeftFooter.Text = ""
.FirstPage.CenterFooter.Text = ""
.FirstPage.RightFooter.Text = ""
End With
Kann mir bitte jemand einen Tipp geben wo ich ansetzen muss...vielen Dank!
Ken

Anzeige

11
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Wiederholungszeilen via VBA definieren
07.03.2013 12:36:14
Erich
Hi Ken,
ActiveWindow.FreezePanes wirkt auf die Anzeige des Fensters des Blatts auf dem Bildschirm,
mit dem Druck hat das nichts zu tun.
Was du möchtest, ist wohl
ActiveSheet.PageSetup.PrintTitleRows = "$7:$7"
Das kannst du mit
.PrintTitleRows = "$7:$7"
hinter deinem "With ActiveSheet.PageSetup" schreiben.
Rückmeldung wäre nett! - Grüße aus Kamp-Lintfort von Erich

Anzeige
AW: Wiederholungszeilen via VBA definieren
07.03.2013 12:58:50
Ken
Hallo Erich,
vielen Dank für die schnelle Antwort und den Tipp! Habe ich sofort umgesetzt, allerdings ist das Resultat gleich: erste Seite druckt den definierten Kopf (aber das passiert bei der ersten Seite ja sowieso) und auf der zweiten Seite steht dann der Rest, ohne den definierten Bereich ($7:$7).
Ich muss aber noch erwähnen, dass ich die Zeilen:
.FitToPagesWide = 1
.FitToPagesTall = 1
auf 2 gesetzt habe, ansonsten presst er alles auf eine Seite.
Es würde mir vielleicht helfen wenn ich dem Code sagen könnte in welcher Zeile die erste Druckseite aufhört und dann nochmal deinen Code einfügen, oder?
Also nochmal Danke und einen fast sonnigen Gruß aus Köln
Ken

Anzeige
AW: Wiederholungszeilen via VBA definieren
07.03.2013 13:03:39
Klaus
Hi Ken,
du machst es falsch. PrintTitleRows funktioniert definitv. In Zeile 7 stehen auch die Überschriften, ja?
Dein Makro, gekürtzt auf das wesentliche:
Sub TitleRows()
With ActiveSheet.PageSetup
PrintTitleRows = "$7:$7"
.FitToPagesWide = 2
.FitToPagesTall = 2
End With
End Sub
Grüße,
Klaus M.vdT.

Anzeige
AW: Wiederholungszeilen via VBA definieren
07.03.2013 13:15:19
Ken
Hallo Klaus M.vdT.,
ich habe meinen Code durch deinen ersetzt und das Ergebnis ist gleich bzw. eher schlimmer, weil er jetzt in Hochformat drucken will und daraus 30 Seiten macht. Aber abgesehen von den 30 Seiten, Zeile 1-7 ist nur im ersten Blatt zu sehen.
Gruß
Ken

AW: Wiederholungszeilen via VBA definieren
07.03.2013 13:18:54
Klaus
Zeile 1-7 ist Sub TitleRows()
With ActiveSheet.PageSetup
PrintTitleRows = "$1:$7"
.FitToPagesWide = 2
.FitToPagesTall = 2
End With
Und jetzt?
Grüße,
Klaus M.vdT.

Anzeige
AW: Wiederholungszeilen via VBA definieren
07.03.2013 13:30:58
Ken
Immer noch nicht, sorry.
Gruß
Ken

Datei bitte!
07.03.2013 13:43:16
Klaus
Hi Ken,
bei mir klappts.
Lädst du eben die Datei hoch bitte?
Grüße,
Klaus M.vdT.

Wiederholungszeilen via VBA definieren
07.03.2013 13:23:40
Erich
Hi Ken,
da geht es also wohl nicht nur um die eine Zeile 7, sondern um die Zeilen 1 bis 7?
Probier mal

Sub TitleRows()
With ActiveSheet.PageSetup
.Orientation = xlLandscape
.PrintTitleRows = "$1:$7"
.FitToPagesWide = 2
.FitToPagesTall = 2
End With
End Sub
Rückmeldung wäre nett! - Grüße aus Kamp-Lintfort von Erich

Anzeige
AW: Druckbereich via VBA definieren
07.03.2013 13:40:22
Ken
Es funktioniert jetzt! Und zwar haben wohl die Zeilen:
Range("7:7").Select
xlApp.ActiveWindow.FreezePanes = True
gestört, wo ich den oberen Bereich mit "einfriere". Er druckt jetzt auf jeder Seite den Bereich $1:$7.
Erstmal sorry, dass es so lange gedauert hat und vielen Dank für die tolle Hilfe!
Eine Frage hätte ich noch, kann ich trotzdem in dem Code angeben ab wann die zweite Seite gedruckt werden soll?
Gruß
Ken

Anzeige
Fenster fixieren, Seitenumbruch
07.03.2013 18:29:48
Erich
Hi Ken,
zum Fixieren des Fensters an Zelle A7 brauchst du nicht die ganze Zeile 7 zu selektieren (mit "7:7"). Dazu reicht
Cells(7, 1).Select '(markiert Zelle A7)
Wozu ist hier das xlApp. gut? Wenn das an dieser Stelle sinnvoll wäre, müsstest du Application und Workbook
an allen Stellen angeben, z. B. mit
With xlApp.ActiveWorkbook.ActiveSheet.PageSetup
Das muss aber vermutlich gar nicht sein,
With ActiveSheet.PageSetup
reicht wohl aus.
Was meinst du mit "ab wann die zweite Seite gedruckt werden soll"?
Geht es darum, vor einer bestimmten Zeile oder Spalte einen Seitenumbruch einzufügen?
Das geht mit den HPageBreaks bzw. VPageBreaks.
Probier mal:

Sub aaaaaa()
Cells(7, 1).Select   ' oder:  Range("A7").Select
ActiveWindow.FreezePanes = True
ActiveSheet.HPageBreaks.Add Before:=Cells(36, 1)  ' oder:  Before:=Range("A36")
End Sub
Rückmeldung wäre nett! - Grüße aus Kamp-Lintfort von Erich

Anzeige
AW: Fenster fixieren, Seitenumbruch
08.03.2013 10:10:19
Ken
Hallo Erich,
sorry für die späte Antwort.
Habe alles umgesetzt und es funktioniert :-) Vielen Dank!
Mein einziges Problem ist, dass der Ausgedruck nicht die ganze Zeite einnimmt, habe rechts noch einen Rand von ca. 5cm, oben und unten wäre auch noch platz.
Nochmal vielen Dank für die tolle Hilfe!
Ken
Anzeige
;
Anzeige
Anzeige

Infobox / Tutorial

Druckbereich via VBA definieren


Schritt-für-Schritt-Anleitung

Um den Druckbereich via VBA zu definieren, kannst du die folgenden Schritte befolgen:

  1. Öffne den VBA-Editor: Drücke ALT + F11, um den Visual Basic for Applications (VBA) Editor zu öffnen.

  2. Füge ein neues Modul hinzu: Klicke mit der rechten Maustaste auf "VBAProject (DeinDateiname)" und wähle "Einfügen" > "Modul".

  3. Gib den folgenden Code ein:

    Sub TitleRows()
       With ActiveSheet.PageSetup
           .Orientation = xlLandscape
           .PrintTitleRows = "$1:$7"
           .FitToPagesWide = 2
           .FitToPagesTall = 2
       End With
    End Sub
  4. Schließe den VBA-Editor und gehe zurück zu Excel.

  5. Führe das Makro aus: Drücke ALT + F8, wähle TitleRows aus und klicke auf "Ausführen".

Dieser Code stellt sicher, dass die Zeilen 1 bis 7 auf jeder gedruckten Seite angezeigt werden.


Häufige Fehler und Lösungen

  • Problem: Die Kopfzeilen erscheinen nicht auf der zweiten Seite.

    • Lösung: Stelle sicher, dass du die PrintTitleRows korrekt gesetzt hast, z.B. .PrintTitleRows = "$1:$7".
  • Problem: Der Druck erzeugt zu viele Seiten.

    • Lösung: Überprüfe die Einstellungen für FitToPagesWide und FitToPagesTall. Setze sie gegebenenfalls auf die gewünschte Anzahl.
  • Problem: Der Druck ist im Hochformat anstatt im Querformat.

    • Lösung: Stelle sicher, dass du .Orientation = xlLandscape in deinem Code hast.

Alternative Methoden

Falls du die Druckbereiche nicht über VBA definieren möchtest, kannst du auch folgende Methoden verwenden:

  1. Manuelle Einstellung in Excel:

    • Gehe zu Seitenlayout > Druckbereich > Druckbereich festlegen.
    • Wähle den gewünschten Bereich aus.
  2. Seitenumbruch manuell einfügen:

    • Gehe zu Seitenlayout > Umbrüche > Seitenumbruch einfügen.

Praktische Beispiele

Hier ist ein Beispiel für einen erweiterten VBA-Code, der zusätzlich einen Seitenumbruch einfügt:

Sub SetPrintAreaWithBreak()
    Cells(7, 1).Select   ' Markiere Zelle A7
    ActiveWindow.FreezePanes = True
    ActiveSheet.HPageBreaks.Add Before:=Cells(36, 1)  ' Fügt einen Seitenumbruch vor Zeile 36 hinzu

    With ActiveSheet.PageSetup
        .Orientation = xlLandscape
        .PrintTitleRows = "$1:$7"
        .FitToPagesWide = 2
        .FitToPagesTall = 2
    End With
End Sub

Tipps für Profis

  • Verwende Application.ScreenUpdating = False am Anfang deines Makros, um die Ausführung zu beschleunigen. Setze es am Ende wieder auf True.
  • Teste deinen Code in einer Kopie deiner Datei, um unerwünschte Änderungen zu vermeiden.
  • Nutze MsgBox, um Rückmeldungen während der Ausführung deines Makros zu erhalten.

FAQ: Häufige Fragen

1. Kann ich mehrere Zeilen als Kopfzeilen festlegen?
Ja, du kannst den Bereich für die Kopfzeilen anpassen, indem du beispielsweise .PrintTitleRows = "$1:$7" verwendest.

2. Wie kann ich den Druckbereich anpassen, um mehr Platz zu nutzen?
Du kannst die Randeinstellungen unter Seitenlayout > Seitenränder anpassen, um den verfügbaren Platz besser zu nutzen.

3. Was ist der Unterschied zwischen FitToPagesWide und FitToPagesTall?
FitToPagesWide bestimmt, wie viele Seiten in der Breite verwendet werden, während FitToPagesTall die Anzahl der Seiten in der Höhe festlegt.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige