Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Excel VBA: Seite einrichten und drucken

Excel VBA: Seite einrichten und drucken
28.02.2020 09:31:42
Axel
Hallo zusammen,
ich hab schon ausgiebig recherchiert, zwar Ansätze, aber noch nicht die Lösung gefunden.
https://www.herber.de/bbs/user/135505.xlsm
Im Tabellenblatt 1 gibt einen CommandButton (Druck), bei dem folgender Code hinterlegt ist:
Private Sub CommandButton21_Click()
With Range(Cells(1, 1), Cells(Cells(Rows.Count, 5).End(xlUp).Row, 9))
.PageSetup.PrintTitleRows = "$1:$11"
.PrintOut preview:=True
End With
End Sub
Es sollte folgendes passieren:
- identifiziere ab Zelle A1 die letzte beschriebene Zeile in den Spalten A:I
- der Bereich A1:I11 soll bei Mehrseitendruck als Kopfzeile wiederholt werden (inkl. der Grafiken, die hier nur exemplarisch eingefügt sind)
- aktuell ist der beschriebene Bereich vor dem Druck als Seitenansicht dargestellt, in der Endlösung kann aber auch einfach gedruckt werden (dann einfach: .PrintOut ?)
Was noch fehlt ist die Formatierung. Ich habe zum Thema "Seite einrichten" gelesen, dass man mit FitToPagesWide and -Tall etwas vorgeben kann, aber wie programmiert man, wo ein Seitenumbruch automatisch stattfindet, wenn das zu druckende länger als 1 Seite ist?
Es müsste auch noch hinterlegt werden, dass der Druck im Querformat stattfinden soll.
Wieder einmal vielen Dank vorab für eure Hilfe.
Beste Grüße
Axel
Anzeige

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

Betreff
Datum
Anwender
Anzeige
AW: Excel VBA: Seite einrichten und drucken
28.02.2020 09:48:44
Nepumuk
Hallo Axel,
alle deine Fragen beantwortet dir der Makro-Rekorder.
Gruß
Nepumuk
AW: Excel VBA: Seite einrichten und drucken
28.02.2020 10:30:45
Axel
Hallo Nepumuk,
ich hab das, was ich machen möchte, vorher mit dem Makro-Editor aufgezeichnet und danach im Netz nach einer Lösung gesucht.
Der Editor zeichnet einen riesigen Code auf, von dem ich nur einen Bruchteil verstehe und denke, dass auch viel davon überflüssig ist. Oder ist das alles echt nötig?
Was trotzdem noch fehlt ist der automatische Seitenumbruch, wenn das erste Tabellenblatt voll ist und wenn ich festlege, dass Querformat eingerichtet werden soll, muss ja trotzdem noch der rechte Rand erweitert werden. Wo steht denn das im Code? Wie gesagt, eine Menge Code, den ich nicht verstehe.
Wenn das zu aufwändig ist, entschuldige ich mich an dieser Stelle. Ich schaue paralle zu meiner Anfrage auch immer, ob ich alleine weiterkomme.
Viele Grüße
Axel
Anzeige
AW: Excel VBA: Seite einrichten und drucken
28.02.2020 10:38:59
Nepumuk
Hallo Axel,
dann zeig mal deinen aufgezeichneten Code. Ich schreib dir dann dazu was was bedeutet.
Den Seitenumbruch macht Excel automatisch wenn die vorhergehende Seite voll ist, darum brauchst du dich nicht kümmern.
Gruß
Nepumuk
AW: Excel VBA: Seite einrichten und drucken
28.02.2020 10:46:53
Axel
Hallo Nepumuk,
vielen Dank dafür. Ich hab auch mal was kommentiert, was ich denke verstanden zu haben:
Private Sub CommandButton21_Click()
' Identifiziert den ausgefüllten Bereich ab Zelle A1 in den Spalte A:I
With Range(Cells(1, 1), Cells(Cells(Rows.Count, 5).End(xlUp).Row, 9))
' Legt den Wiederholungsbereich für jede Seite fest, A1:I11 inkl. Grafiken
.PageSetup.PrintTitleRows = "$1:$11"
.PrintTitleColumns = ""
' Formatierung Querformat
.Orientation = xlLandscape
.LeftHeader = ""
.CenterHeader = ""
.RightHeader = ""
.LeftFooter = ""
.CenterFooter = ""
.RightFooter = ""
.LeftMargin = Application.InchesToPoints(0.708661417322835)
.RightMargin = Application.InchesToPoints(0.708661417322835)
.TopMargin = Application.InchesToPoints(0.78740157480315)
.BottomMargin = Application.InchesToPoints(0.78740157480315)
.HeaderMargin = Application.InchesToPoints(0.31496062992126)
.FooterMargin = Application.InchesToPoints(0.31496062992126)
.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 = 100
.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 = ""
' Seitenansicht: Erweiterung bis einschließlich Spalte I
.VPageBreaks(1).DragOff Direction:=xlToRight, RegionIndex:=1
.PrintOut preview:=True
End With
End Sub

Anzeige
AW: Excel VBA: Seite einrichten und drucken
28.02.2020 13:52:14
Axel
Bin jetzt erst mal in Terminen und dann weg.
Ich schau Montag wieder rein.
@Nepumuk, Du musst nicht alles kommentieren, einiges ist ja selbsterklärend.
Schade, dass das Makro nicht läuft. Gleich zu beginn kommt die Fehlermeldung "Objekt unterstützt diese Methode oder Eigenschaft nicht".
Schönes Wochenende
Axel
Anzeige
AW: Excel VBA: Seite einrichten und drucken
03.03.2020 06:28:47
Axel
Hallo Nepumuk,
ich frage noch mal nach, ob Du weiter unterstützen kannst.
Leider komme ich ohne die Unterstützung des Forums nicht weiter und bin immer dankbar für diese tolle Möglichkeit.
Sga bitte kurz bescheid, ob Du noch antworten wirst.
Vielen Dank nochmals.
Axel
Fehlermeldung bei folgendem Code
03.03.2020 07:58:12
Axel
Hallo zusammen,
falls jemand diesen Thread noch beachtet, ich habe folgenden Code, der doch eigentlich funktionieren sollte, aber an der Stelle " ActiveSheet.VPageBreaks(1).DragOff Direction:=xlToRight, RegionIndex:=1
" erscheint eine Fehlermeldung.
Bitte kann mir jemand sagen, warum?
Vielen Dank vorab
Axel
Sub Seite_einrichten()
Application.PrintCommunication = False
With ActiveSheet.PageSetup
.PrintTitleRows = "$1:$11" 'Wiederholungszeilen pro Seite
.PrintTitleColumns = ""
.PrintArea = ""
.LeftHeader = ""
.CenterHeader = ""
.RightHeader = ""
.LeftFooter = ""
.CenterFooter = ""
.RightFooter = ""
.LeftMargin = Application.InchesToPoints(0.31496062992126)
.RightMargin = Application.InchesToPoints(0.31496062992126)
.TopMargin = Application.InchesToPoints(0.393700787401575)
.BottomMargin = Application.InchesToPoints(0.393700787401575)
.HeaderMargin = Application.InchesToPoints(0.31496062992126)
.FooterMargin = Application.InchesToPoints(0.31496062992126)
.PrintHeadings = False
.PrintGridlines = False
.PrintComments = xlPrintNoComments
.PrintQuality = 600
.CenterHorizontally = False
.CenterVertically = False
.Orientation = xlLandscape 'Querformat
.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
Application.PrintCommunication = True
ActiveWindow.View = xlPageBreakPreview
ActiveSheet.VPageBreaks(1).DragOff Direction:=xlToRight, RegionIndex:=1
ActiveSheet.HPageBreaks(1).DragOff Direction:=xlDown, RegionIndex:=1
ActiveWindow.View = xlNormalView
Application.Dialogs(xlDialogPrint).Show
End Sub

Anzeige
AW: Excel VBA: Seite einrichten und drucken
29.02.2020 18:53:52
Sven
Hallo,
da ich auch vor solch einem Problem stand, anbei mein verwendetes Makro.
Gruss
Sven A.

Private Sub Drucken()
With ActiveSheet
Druckanfang = Columns("B").Find("*", SearchDirection:=xlPrevious, SearchOrder:=xlByRows,  _
LookIn:=xlValues).Row
Druckende = .Cells(Rows.Count, "D").End(xlUp).Row
.PageSetup.PrintArea = ""
.PageSetup.PrintArea = Range(Cells(Druckanfang, 3), Cells(Druckende, 13)).Address
.PageSetup.PrintTitleRows = "$C$1:$P$7"
.PageSetup.PaperSize = xlPaperA4
.PageSetup.CenterHorizontally = True
.PrintOut 'Sofortdruck
'.PrintPreview 'nutzen wenn eine Auswahl des Druckers gewünscht
End With
End Sub

Anzeige
AW: Excel VBA: Seite einrichten und drucken
29.02.2020 18:59:33
Sven
Hallo,
da ich auch vor solch einem Problem stand, anbei mein verwendetes Makro.
Gruss
Sven A.

Private Sub Drucken()
With ActiveSheet
Druckanfang = Columns("B").Find("*", SearchDirection:=xlPrevious, SearchOrder:=xlByRows,  _
LookIn:=xlValues).Row
Druckende = .Cells(Rows.Count, "D").End(xlUp).Row
.PageSetup.PrintArea = ""
.PageSetup.PrintArea = Range(Cells(Druckanfang, 3), Cells(Druckende, 13)).Address
.PageSetup.PrintTitleRows = "$C$1:$P$7"
.PageSetup.PaperSize = xlPaperA4
'.PageSetup.CenterHorizontally = True 'Hochformat
.PageSetup.Orientation = xlLandscape 'Querformat
.PrintOut 'Sofortdruck
'.PrintPreview 'nutzen wenn eine Auswahl des Druckers gewünscht
End With
End Sub

Anzeige
AW: Excel VBA: Seite einrichten und drucken
02.03.2020 07:28:09
Axel
Guten Morgen Sven,
vielen Dank.
Wenn ich den Code richtig verstanden habe, suchst Du ab Spalte B nach dem *.
Bzgl. PrintArea muss ich mal im Netz suchen, was das heißt.
@Nepumuk: hattest Du schon Zeit, mal über den Code zu schauen?
Allen einen guten Wochenstart.
Axel
AW: Excel VBA: Seite einrichten und drucken
06.03.2020 21:42:00
Sven
hallo,
leider komme ich mit dem Forum nicht so ganz zurecht, hoffe aber das meine Antwort dich erreicht. Hier mein Vorschlag:
Private Sub Drucken()
Druckende = Sheets(1).UsedRange.SpecialCells(xlCellTypeLastCell).Row
'ermittelt die letzte Zelle mit Inhalt im gesamten Blatt
With ActiveSheet
.PageSetup.PrintArea = "" 'evt vorhandenen Druckbereich löschen
.PageSetup.PrintArea = Range(Cells(12, 1), Cells(Druckende, 9)).Address
.PageSetup.PrintTitleRows = "$A$1:$I$11"
.PageSetup.PaperSize = xlPaperA4
'.PageSetup.CenterHorizontally = True 'Hochformat
.PageSetup.Orientation = xlLandscape 'Querformat
'.PrintOut 'Sofortdruck wenn auskommentiert
.PrintPreview 'nutzen wenn eine Auswahl des Druckers gewünscht
End With
End Sub

Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

Excel VBA: Seite einrichten und drucken


Schritt-für-Schritt-Anleitung

  1. VBA-Editor öffnen: Drücke ALT + F11, um den VBA-Editor zu öffnen.

  2. Modul hinzufügen: Klicke im Projektfenster mit der rechten Maustaste auf VBAProject (DeineDatei.xlsx) und wähle Einfügen > Modul.

  3. Code eingeben: Füge den folgenden Code ein, um die Seite einzurichten und zu drucken:

    Private Sub CommandButton21_Click()
        With Range(Cells(1, 1), Cells(Cells(Rows.Count, 5).End(xlUp).Row, 9))
            .PageSetup.PrintTitleRows = "$1:$11"
            .PageSetup.Orientation = xlLandscape
            .PageSetup.FitToPagesWide = 1
            .PageSetup.FitToPagesTall = False
            .PrintOut Preview:=True
        End With
    End Sub
  4. Druckbereich festlegen: Stelle sicher, dass der Druckbereich mit .PageSetup.PrintArea definiert ist, falls du einen bestimmten Bereich drucken möchtest.

  5. Makro ausführen: Klicke auf den CommandButton, um den Druckprozess zu starten.


Häufige Fehler und Lösungen

  • Fehlermeldung "Objekt unterstützt diese Methode oder Eigenschaft nicht": Überprüfe, ob der Code auf das richtige Arbeitsblatt angewendet wird. Manchmal kann der Fehler auftreten, wenn das Arbeitsblatt nicht aktiv ist.

  • Druckbereich wird nicht erkannt: Stelle sicher, dass du den Druckbereich korrekt definierst. Verwende .PrintArea = Range("A1:I11").Address, um den gewünschten Bereich festzulegen.

  • Seitenumbruch funktioniert nicht: Excel sollte automatisch Seitenumbrüche setzen, wenn die Seite voll ist. Wenn dies nicht der Fall ist, überprüfe die Seiteneinstellungen.


Alternative Methoden

  • Makro Rekorder verwenden: Du kannst den Makro-Rekorder aktivieren, um den notwendigen Code aufzunehmen. Dies ist eine gute Methode, um dir ein Gefühl für die VBA-Syntax zu verschaffen.

  • Excel-Druckoptionen nutzen: Verwende die eingebauten Druckoptionen in Excel, um die Seite manuell einzurichten, bevor du den VBA-Code anwendest.


Praktische Beispiele

Beispiel 1: Einfaches Makro für den Druck

Sub EinfachesDrucken()
    With ActiveSheet
        .PageSetup.PrintArea = "A1:I20"
        .PrintOut Preview:=True
    End With
End Sub

Beispiel 2: Automatisches Anpassen der Seitenbreite

Sub SeitenAutomatischAnpassen()
    With ActiveSheet.PageSetup
        .FitToPagesWide = 1
        .FitToPagesTall = False
    End With
    ActiveSheet.PrintOut Preview:=True
End Sub

Tipps für Profis

  • Nutze .FitToPagesWide und .FitToPagesTall, um sicherzustellen, dass deine Daten optimal auf das Papierformat passen. Dies ist besonders nützlich, wenn du Excel auf eine Seite drucken möchtest.

  • Verwende .PrintPreview, um eine Vorschau der Druckseite in Excel VBA zu erhalten, bevor du tatsächlich druckst. Dies hilft, Fehler im Layout zu vermeiden.

  • Überlege, ob die Verwendung von Application.PrintCommunication sinnvoll ist, um die Druckeinstellungen effizient zu ändern, ohne dass Excel die Änderungen ständig anzeigt.


FAQ: Häufige Fragen

1. Wie kann ich sicherstellen, dass meine Kopfzeilen beim Drucken wiederholt werden? Du kannst die Kopfzeilen mit dem Befehl .PageSetup.PrintTitleRows = "$1:$11" festlegen, sodass diese auf jeder Seite erscheinen.

2. Was mache ich, wenn mein Druckbereich nicht korrekt erkannt wird? Überprüfe, ob der Druckbereich richtig definiert ist. Verwende den Befehl .PrintArea und achte darauf, die richtigen Zellen anzugeben.

3. Wie kann ich beim Drucken die Orientierung der Seite ändern? Setze die Seitenorientierung mit .PageSetup.Orientation = xlLandscape, um im Querformat zu drucken.

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