PDA

Vollständige Version anzeigen : Druckbereich teilen


cimoto
01.10.2016, 08:48
Hallo zusammen,

bis jetzt verwende ich folgenden code

Private Sub Drucken_Click()
ActiveSheet.PageSetup.PrintArea = "$c$1:$Af$73"
ActiveSheet.PrintOut
ActiveSheet.PageSetup.PrintArea = False
End Sub

Ist es möglich verschiedene Bereiche von einem Tabellenblatt zu drucken? Also zb. nur A-K und dann wieder R-AF?

Zudem ist es jetzt so, das mit dem Klick auf "drucken", sofort gedruckt wird. Ich bräuchte aber die Abfrage nach dem Drucker und den generellen Einstellungsmöglichkeiten. Also quasi so, als ob man "Strg+P" klickt.

Da ich den max. Druckbereich auf einem A4 Blatt herausholen will, wäre es auch sinvoll die Ränder zu minimieren und den Tabellenblattnamen wegzulassen. Geht das?

Danke..

Hajo_Zi
01.10.2016, 09:01
verschiedene Druckbereiche werden auf verschiedenen Blätter gedruckt. Es sei den Du blendest Zeilen, Spalten aus.
Mache das Drucken über ein Makro.

Ergänzung Druckerauswahl
Application.Dialogs(9).Show

<img src="http://Hajo-Excel.de/images/grusz1.gif" align="middle" height="40" alt="Grußformel"><a href="http://Hajo-Excel.de/index.htm"><img border="0" src="http://Hajo-Excel.de/images/logo_hajo3.gif" align="middle" height="40" alt="Homepage"></a>

cimoto
01.10.2016, 09:12
Ausblenden ist keine Alternative, dann muss ich wohl damit leben.

Hast du für die anderen Fragen auch eine Idee?

Hajo_Zi
01.10.2016, 09:14
meine Ergänzung ist wohl untergegangen.
<a href="http://Hajo-Excel.de/index.htm" target="_blank" title="Hajo's Excelseiten">Gruß Hajo</a>

Benutzername:
01.10.2016, 09:38
Servus Cimoto,

nur so eine Idee, wenn Ausblenden keine Option ist, evtl. ein Kopieren der relevanten Werte und Formate in ein neues Sheet.

Dieses könntest Du dann vor dem Druck anpassen (kleiner Rand, Footer, Header, etc.).

Ein kurzes Aufzeichnen per Rekorder zeigte schon diverse Properties die dir hier helfen könnten.


With ActiveSheet.PageSetup
.PrintTitleRows = ""
.PrintTitleColumns = ""
.LeftHeader = ""
.CenterHeader = ""
.RightHeader = ""
.LeftFooter = ""
.CenterFooter = ""
.RightFooter = ""
.LeftMargin = Application.InchesToPoints(0.25)
.RightMargin = Application.InchesToPoints(0.25)
.TopMargin = Application.InchesToPoints(0.75)
.BottomMargin = Application.InchesToPoints(0.75)
.HeaderMargin = Application.InchesToPoints(0.3)
.FooterMargin = Application.InchesToPoints(0.3)
.PrintHeadings = False
.PrintGridlines = False
.PrintComments = xlPrintNoComments
.PrintQuality = 600
.CenterHorizontally = False
.CenterVertically = False
.Orientation = xlPortrait
.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 = ""
End With


Gruss,
Stephan

cimoto
01.10.2016, 11:44
Danke Hajo, funktioniert!

Stephan, hört sich interessant an. Wie kann ich das umsetzen? Ich bin ein VBA Laie und bräuchte Quasi eine Schritt für Schritt Anleitung.

Es geht hier um Monatsblätter, also Jan-Dez. Am Ende des Monats muss diser ausgedruckt werden. Muss ich jetzt für jeden Monat ein seperates Blatt anlegen, das dann als Druckausgabe dient?
Ausserdem ist das anlegen neuer Tabellenblätter für den Benutzer gesperrt. Muss dies dann deaktiviert werden?

Ic3
01.10.2016, 12:14
Warum nicht für den Druck ausblenden und dann sofort wieder einblenden?
Merkt doch keiner...

Private Sub Drucken_Click()

Columns("R:AE").EntireColumn.Hidden = True 'Spalten ausblenden

' Hier Seitenvorgaben festlegen...
With ActiveSheet.PageSetup
.Zoom = False
.FitToPagesWide = 1
.FitToPagesTall = 1
.Orientation = xlLandscape
End With

ActiveSheet.PageSetup.PrintArea = "$a$1:$AF$20"

'ActiveSheet.PrintOut
'Application.Dialogs(9).Show
ActiveSheet.PrintPreview

Columns("R:AE").EntireColumn.Hidden = False 'Spalten wieder einblenden
ActiveSheet.PageSetup.PrintArea = False
End Sub

Benutzername:
01.10.2016, 12:23
Servus cimoto,

Ist ein Ausblenden überhaupt nötig?

Willst Du den ersten Block A bis K dann auf einer Seite haben?
Und dann den zweiten Block auf einer seperaten Seite?
Den Rest gar nicht? Und hast Du immer 73 Zeilen?

Die Druckerproperties kann man trotzdem vorher anpassen und wie Ic3 schon angedeutet in das Makro einbauen?

Gruss,
Stephan

cimoto
01.10.2016, 12:42
Gute Idee, nur leider hat mir dein Code meine komplette formatierung und Positionen der Checkboxen zerschossen und das Druckergebnis ist auch nicht das was ich will. Ist alles verschoben und undeutlich dargestellt.

cimoto
01.10.2016, 12:57
Servus cimoto,

Ist ein Ausblenden überhaupt nötig?

Willst Du den ersten Block A bis K dann auf einer Seite haben?
Und dann den zweiten Block auf einer seperaten Seite?
Den Rest gar nicht? Und hast Du immer 73 Zeilen?

Die Druckerproperties kann man trotzdem vorher anpassen und wie Ic3 schon angedeutet in das Makro einbauen?

Gruss,
Stephan

Ist glaube ich alles schwieriger als ich Anfangs gedacht habe. Zuviele Faktoren die das Ergebnis beeinflussen.

Am besten ich splitte den Druck auf 2 Seiten im Hochformat.
Die erste Seite A-N und die zweite Seite R-AF. Es sind auch immer unterschiedliche Zeilenzahlen, 72-76.
Wie stelle ich das am besten an? Ich möchte weiterhin gerne mit VBA arbeiten, auch deshalb weil für den Benutzer viele Sachen gesperrt sind und die Tabelle auch im Vollbild startet.

Oder wäre es einfacher oder auch intuitiver die Sache ganz normal über Druckbereiche zu realisieren?

Ic3
01.10.2016, 13:04
Kannst du nicht eine Datei mit anonymen Daten erstellen?

Spalten für den Druck ausblenden ist halt das einfachste. Die Anzahl der Zeilen kann man auch per VBA finden. Und viele Dinge an die du vielleicht noch nicht denkst.
Auch ein Blattschutz usw. sind per VBA steuerbar. Oder Blätter ausblenden…

Benutzername:
01.10.2016, 14:09
Tach Cimoto,

ich habe das nun mal mit den genannten Druckbereichen gelöst.

Die Adressen sind Beispielhaft und könnten natürlich per Makro an tatsächliche Begebenheiten angepasst werden.

Du kannst es ja mal testen ob das in die richtige Richtung gehen würde oder ob ich es doch falsch verstanden habe.

Ich nutze für meine Testprints immer einen PDF Drucker, das spart Papier und Tinte ;)

Gruss,
Stephan


Option Explicit

Sub PrintTables()

PrintRange ActiveSheet.Range(Cells(1, 1), Cells(78, 11))

PrintRange ActiveSheet.Range(Cells(1, 18), Cells(78, 32))

End Sub

Sub PrintRange(targetRange As Range)

Application.PrintCommunication = False
With ActiveSheet.PageSetup
.PrintTitleRows = ""
.PrintTitleColumns = ""
.LeftHeader = ""
.CenterHeader = ""
.RightHeader = ""
.LeftFooter = ""
.CenterFooter = ""
.RightFooter = ""
.LeftMargin = Application.InchesToPoints(0.393700787401575)
.RightMargin = Application.InchesToPoints(0.393700787401575)
.TopMargin = Application.InchesToPoints(0.393700787401575)
.BottomMargin = Application.InchesToPoints(0.393700787401575)
.HeaderMargin = Application.InchesToPoints(0)
.FooterMargin = Application.InchesToPoints(0)
.PrintHeadings = False
.PrintGridlines = False
.PrintComments = xlPrintNoComments
.PrintQuality = 600
.CenterHorizontally = True
.CenterVertically = False
.Orientation = xlPortrait
.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

targetRange.PrintPreview

End Sub

cimoto
01.10.2016, 18:04
Irgendwie klappt das alles nicht. Keine Ahnung woran es liegt, ich bekomme nur Fehlermeldungen mit deinem Code.

Ich habe jetzt 2 Druckbereiche festgelegt mit einer "Wiederholungsspalte links". Das funktioniert ganz gut, allerdings nur mit STRG+P, nicht mit meinem Druckbutton. Gibts dafür eine Lösung?

Benutzername:
01.10.2016, 19:12
Tach cimoto,

beim mir funktioniert der Code problemlos.

Was meckert er bei dir denn genau?

Hast den Code mal in ThisWorkbook kopiert und die PrintTables Sub ausgeführt?

Betreffend Ctrl+P bzw. Druckbutton kann ich nicht weiterhelfen, sorry.

Gruss,
Stephan

cimoto
04.10.2016, 13:37
Danke für eure Hilfe. Ich bin jetzt doch zu der normalen Lösung übergegangen. Die bereitet am wenigsten Probleme. Dann müssen die Jungs halt mit Strg+P vorlieb nehmen.. :)