MS-Office-Forum
Google
   

Zurück   MS-Office-Forum > Microsoft Office > Microsoft Excel
Registrieren Forum Hilfe Alle Foren als gelesen markieren

Banner und Co.

Antworten
Ads Der Renner, 11 Entwicklertools für Access, Tipps & Trick und offene Datenbanken zum einzigartigen Preis.
Themen-Optionen Ansicht
Alt 13.09.2017, 08:39   #1
PiotreBlicktsNet
Neuer Benutzer
Neuer Benutzer
Standard VBA - Druckeinstellungen für mehrere Tabellenblätter

Hallo zusammen,

ich bin jetzt schon einige Tage auf Suche, kann aber leider keine Lösungen finden.

Ich habe eine Datei mit mehreren Tabellenblätter. Nun möchte ich gerne per VBA einige Tabellenblätter als pdf drucken lassen. Ich habe auch schon einen Code zusammengestellt, der aber leider irgendwie nicht richtig funktioniert. Leider werden immer die vorher gespeicherten Druckeinstellungen angezogen und nicht die die ich gerne hätte bzw. die die ich im Code hinterlegt habe .
Einzig und alleine funktioniert der Druck als pdf, sprich es wird immer der richtige Drucker (in dem Fall Adobe) angezogen.

Mein Code sieht folgendermaßen aus.

Sub Bericht_Komplett_PDF()
Sheets(Array("Tabelle2", "Tabelle3", "Tabelle4", "Tabelle5")).Select
Sheets("Tabelle2").Activate
With ActiveSheet.PageSetup
.PaperSize = xlPaperLegal
.LeftMargin = Application.InchesToPoints(0)
.RightMargin = Application.InchesToPoints(0)
.TopMargin = Application.InchesToPoints(0)
.BottomMargin = Application.InchesToPoints(0)
.HeaderMargin = Application.InchesToPoints(0)
.FooterMargin = Application.InchesToPoints(0)
.RightFooter = "&12&P / &N"
.DifferentFirstPageHeaderFooter = True
.CenterHorizontally = True
.CenterVertically = True
.Orientation = xlLandscape
.Zoom = False
.FitToPagesWide = 1
.FitToPagesTall = 1
End With
ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True, IgnorePrintAreas:=False, ActivePrinter:="Adobe PDF"
Sheets("Tabelle1").Select
Range("H5").Select
End Sub

Wenn mir hierbei irgendjemand helfen könnte wäre das klasse!
Vorab schon mal vielen Dank an die helfenden Programmierer
PiotreBlicktsNet ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 13.09.2017, 09:46   #2
EarlFred
MOF Guru
MOF Guru
Standard

Hallo,

so?
Code:

Option Explicit

Sub Bericht_Komplett_PDF()
Dim ws As Worksheet

For Each ws In Worksheets(Array("Tabelle2", "Tabelle3", "Tabelle4", "Tabelle5"))
  With ws.PageSetup
    .PaperSize = xlPaperLegal
    .LeftMargin = Application.InchesToPoints(0)
    .RightMargin = Application.InchesToPoints(0)
    .TopMargin = Application.InchesToPoints(0)
    .BottomMargin = Application.InchesToPoints(0)
    .HeaderMargin = Application.InchesToPoints(0)
    .FooterMargin = Application.InchesToPoints(0)
    .RightFooter = "&12&P / &N"
    .DifferentFirstPageHeaderFooter = True
    .CenterHorizontally = True
    .CenterVertically = True
    .Orientation = xlLandscape
    .Zoom = False
    .FitToPagesWide = 1
    .FitToPagesTall = 1
  End With
Next ws

Worksheets(Array("Tabelle2", "Tabelle3", "Tabelle4", "Tabelle5")).PrintPreview

'Worksheets(Array("Tabelle2", "Tabelle3", "Tabelle4", "Tabelle5")).PrintOut Copies:=1, Collate:=True, IgnorePrintAreas:=False, ActivePrinter:="Adobe PDF"
End Sub
Den Druckbefehl habe ich zu Testzwecken auskommentiert.

Die erste Seite erhält eine andere Fußzeile. Wenn das nicht gewollt ist, ändere die rote Zeile.

Excel hat seit langem auch eine die integrierte Exportfunktion.

Grüße
EarlFred
EarlFred ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 13.09.2017, 11:17   #3
PiotreBlicktsNet
Threadstarter Threadstarter
Neuer Benutzer
Neuer Benutzer
Standard

Hallo EarlFred,

vielen Dank für die schnelle Hilfe! Klappt auch soweit super.
Nur bis die eigentliche Speicherung als pdf beginnt, bzw ich wegen dem Speicherplatz gefragt werde dauert es relativ lange.

Aber das Problem bekomme ich irgendwie noch hin.

Gruß Piotre
PiotreBlicktsNet ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 20.09.2017, 13:05   #4
PiotreBlicktsNet
Threadstarter Threadstarter
Neuer Benutzer
Neuer Benutzer
Standard

Hallo zusammen,

ich habe den Code nun soweit fertig und es klappt auch alles.
Nur leider dauert es sehr lange bis ich nach dem Speicherort der pdf gefragt werde. In Summe sind das in etw 2:15min für 23 Tabellenblätter.

Der Code sieht folgendermaßen aus:

Sub DL_Bericht_Komplett_PDF() ' DL_Bericht_Komplett als PDF Version

Dim ws As Worksheet

For Each ws In Worksheets(Array("Tab1", "Tab2", "Tab3", "Tab4", "Tab5", "Tab6", "Tab7", "Tab8", "Tab9", "Tab10", "Tab11", "Tab12", "Tab13", "Tab14", "Tab15", "Tab16", "Tab17", "Tab18", "Tab19", "Tab20", "Tab21", "Tab22", "Tab23"))

With ws.PageSetup
.PrintArea = "$D$2:$DX$54"
.LeftHeader = "&""Porsche Next TT,Fett""&18&KFF0000 EA825 V8T &K01+000- Dauerlaufstatus"
.CenterHeader = "&G"
.RightHeader = "&G"
.LeftFooter = "&11 Legende: T = TBT Sonderteile Z = Zerlegung Fzg. S = Sichtung Mot. B = Befundung Mot."
.CenterFooter = "&G" & Chr(10) & ""
.RightFooter = "&P / &N "
.LeftMargin = Application.InchesToPoints(0)
.RightMargin = Application.InchesToPoints(0)
.TopMargin = Application.InchesToPoints(0.590551181102362)
.BottomMargin = Application.InchesToPoints(0.590551181102362)
.HeaderMargin = Application.InchesToPoints(0.196850393700787)
.FooterMargin = Application.InchesToPoints(0.118110236220472)
.PrintHeadings = False
.PrintGridlines = False
.PrintComments = xlPrintNoComments
.PrintQuality = 1200
.CenterHorizontally = True
.CenterVertically = True
.Orientation = xlLandscape
.Draft = False
.PaperSize = xlPaperLegal
.FirstPageNumber = xlAutomatic
.Order = xlDownThenOver
.BlackAndWhite = False
.Zoom = False
.FitToPagesWide = 1
.FitToPagesTall = 1
.PrintErrors = xlPrintErrorsDisplayed
.OddAndEvenPagesHeaderFooter = False
.DifferentFirstPageHeaderFooter = True
.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 = "" & Chr(10) & "&G"
.FirstPage.RightHeader.Text = ""
.FirstPage.LeftFooter.Text = ""
.FirstPage.CenterFooter.Text = "&G" & Chr(10) & "&""Porsche Next TT,Fett""&14EAM3"
.FirstPage.RightFooter.Text = ""
End With

Next ws

Worksheets(Array("Tab1", "Tab2", "Tab3", "Tab4", "Tab5", "Tab6", "Tab7", "Tab8", "Tab9", "Tab10", "Tab11", "Tab12", "Tab13", "Tab14", "Tab15", "Tab16", "Tab17", "Tab18", "Tab19", "Tab20", "Tab21", "Tab22", "Tab23")).PrintOut Copies:=1, Collate:=True, IgnorePrintAreas:=False, ActivePrinter:="Adobe PDF"

Sheets("Übersicht").Select
Range("C4").Select

End Sub

Wenn mir jemand dazu evtl. einen Lösungsvorschlag hätte wäre das klasse! Vielleicht ist das aber normal bei einem solchen Datenumfang!?

Grüße

Piotre
PiotreBlicktsNet ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 20.09.2017, 14:25   #5
EarlFred
MOF Guru
MOF Guru
Standard

Hallo Piotre,

Du kannst versuchen, vor dem Makrodurchlauf einen lokalen Drucker (z. B: den installierten Faxtreiber) einzustellen. Möglicherweise beschleunigt das den Durchlauf.
Aber Wunder erwarte ich in Verbindung mit dem PageSetup-Object nicht.

Alternativ kannst Du auf Vorlageblätter umsteigen oder (nicht wirklich elegant) bei "starrem" Blattaufbau die Kopf- und Fußzeile im Blatt mit darstellen.

Grüße
EarlFred
EarlFred ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 21.09.2017, 09:16   #6
PiotreBlicktsNet
Threadstarter Threadstarter
Neuer Benutzer
Neuer Benutzer
Standard

Guten Morgen EarlFred,

erneut vielen Dank für deine schnelle Antwort!
Das mit der Darstellung im Blatt habe ich bereits probiert. Bringt leider keinen Zeitgewinn.
Was meinst du mit Vorlageblätter?
Ich sehe aber schon, dass ich bzw. meine Kollegen wohl mit der Wartezeit leben müssen.
PiotreBlicktsNet ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 21.09.2017, 13:53   #7
PiotreBlicktsNet
Threadstarter Threadstarter
Neuer Benutzer
Neuer Benutzer
Standard

Hallo zusammen,

eigentlich dachte ich, dass ich die Datei längst fertig habe, hätte auch nicht gedacht, dass die letzte Vorgabe für mich einfach nicht machbar ist.

Bei drucken der Tabellenblätter hätten wir nun noch gerne, dass die Abspeicherung der pdf Datei automatisch in einen bestimmten Ordner mit einem vorgegeben Namen durchgeführt werden soll. Dabei stehen Link und Namen in zwei Zellen auf dem ersten Blatt.

Wenn wir hierfür noch eine kurze Hilfen bekommen könnten wäre das natürlich spitze.

Vorab schon mal vielen Dank für euren Hilfe!!

Gruß Piotre

P.S. der Code sieht immernoch wie oben beschrieben aus.
PiotreBlicktsNet ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 21.09.2017, 17:24   #8
EarlFred
MOF Guru
MOF Guru
Standard

Hallo Piotre,

wenn Du die seit dem Servicepack für Version 2007 enthaltenen Exportfilter nutzt, ist auch das leicht umsetzbar.
Stichworte: ExportAsFixedFormat, xlTypePDF

Da findest Du sowohl in der OH als auch im Netz genügend Code.

Grüße
EarlFred
EarlFred ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 21.09.2017, 17:43   #9
RPP63neu
MOF Meister
MOF Meister
Standard

Zitat: von EarlFred Beitrag anzeigen

Du kannst versuchen, vor dem Makrodurchlauf einen lokalen Drucker (z. B: den installierten Faxtreiber) einzustellen. Möglicherweise beschleunigt das den Durchlauf.
Aber Wunder erwarte ich in Verbindung mit dem PageSetup-Object nicht.

Hallo EarlFred!
Ich setze in solchen Fällen immer
Application.PrintCommunication = False
Auch die Online-Hilfe empfiehlt dies:

Zitat: von VBA-Hilfe

Legen Sie die PrintCommunication-Eigenschaft auf False fest, um die Ausführung von Code zu beschleunigen, der PageSetup-Eigenschaften festlegt.

https://msdn.microsoft.com/de-de/lib...ffice.15).aspx

Dass dies wieder zurückgesetzt werden muss, schreibe ich nicht Dir, sondern den "Querlesern".

Gruß Ralf

__________________

Meine Logik war nicht fehlerhaft, nur meine Interpretation!
Tuvok
RPP63neu ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 21.09.2017, 21:08   #10
EarlFred
MOF Guru
MOF Guru
Standard

@Ralf,
guter Tipp, danke. Kennt mein archäologisch relevantes Excel halt nicht und msdn hält den von Dir genannten Tipp nicht vor...

Aber wenn ich mal auf 2007 modernisiere, weiß ich es dann

Grüße
EarlFred
EarlFred ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 22.09.2017, 06:55   #11
Luschi
MOF Koryphäe
MOF Koryphäe
Standard

Hallo EarlFred,

Application.PrintCommunication gibt es ers ab Excel 2010, denn ich habe folgenden Code im I-Net gefunden:
Code:

If Val(Application.Version) > 12 Then 'version Excel > 2007
    Application.PrintCommunication = False
End If

With ActiveSheet.PageSetup 
    .PrintTitleRows = "" 
    .PrintTitleColumns = "" 
    'and so on
End With
If Val(Application.Version) > 12 Then
    Application.PrintCommunication = True
End If
Als Trost für alle Excel-Oldtimer siehe (letztes Beispiel): h i e r

Gruß von Luschi
aus klein-Paris
Luschi ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 24.10.2017, 12:08   #12
PiotreBlicktsNet
Threadstarter Threadstarter
Neuer Benutzer
Neuer Benutzer
Standard

Hallo RPP63neu,

vielen Dank für die Hilfe!!!
Das klappt perfekt! So macht man aus über 2 Minuten nur ganze 5 Sekunden.

TOP!!
PiotreBlicktsNet ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 24.10.2017, 13:09   #13
haklesoft
MOF Koryphäe
MOF Koryphäe
Standard

Zitat:

If Val(Application.Version) > 12 Then

O.T.: Jetzt suche ich wie im Ami-Fahrstuhl nach der 13.

__________________

Hang loose, haklesoft
haklesoft ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 09.11.2017, 09:03   #14
PiotreBlicktsNet
Threadstarter Threadstarter
Neuer Benutzer
Neuer Benutzer
Standard VBA Druck mehrerer Tabellblätter

Hallo zusammen,

ich habe nun noch zwei Probleme.

Bei meiner Datei hat sich nun herausgestellt, dass sich die ANzahl der zu druckenden Tabellenblätter hier und da mal ändert.
Nun dachte ich mir, ich könnte in Zelle C3 aller Tabellenblätter "aktiv" reinschreiben, so dass das Makro dann weiß welches Tabellenblatt gedruckt werden soll. Nur leider komme ich nicht auf die Lösung, wie ich diesen Befehl in das vorhandene Makro einfüge.

Zweitens ist der Druckbereich leider auch variabel. Gedruckt wird ein Auszug aus einem Zeitstrahl, der über eine Gruppierung angezeigt wird. Sprich was älter ist wird ausgeblendet. Wie bekomme ich den Druckbereich auf dieses Problem angepasst? Es sollen quasi immer die 50 angezeigten Spalten ab Spalte C gedruckt werden.

Wenn mir hier nochmals jemand helfen könnte wäre das mega top!

Voller Hoffnung und Vorfreude!

Piotre

PS - Das Makro sieht derzeit folgendermaßen aus:

Sub DL_Bericht_Komplett_PDF() ' DL_Bericht_Komplett als PDF Version

Dim wks As Worksheet
For Each wks In Application.Worksheets
wks.Outline.ShowLevels RowLevels:=0, ColumnLevels:=1
wks.Outline.ShowLevels RowLevels:=1
Next wks

Dim ws As Worksheet
For Each ws In Worksheets(Array("Deckblatt für Präsi", "1", "2", "3", "4", "5"))
Application.PrintCommunication = False
With ws.PageSetup
.PrintArea = "$C$2:$EB$58"
.LeftMargin = Application.InchesToPoints(0)
.RightMargin = Application.InchesToPoints(0)
.TopMargin = Application.InchesToPoints(0)
.BottomMargin = Application.InchesToPoints(0)
.HeaderMargin = Application.InchesToPoints(0)
.FooterMargin = Application.InchesToPoints(0.2)
.PrintHeadings = False
.PrintGridlines = False
.PrintComments = xlPrintNoComments
.PrintQuality = 600
.CenterHorizontally = True
.CenterVertically = True
.Orientation = xlLandscape
.Draft = False
.PaperSize = xlPaperLegal
.FirstPageNumber = xlAutomatic
.Order = xlDownThenOver
.BlackAndWhite = False
.Zoom = False
.FitToPagesWide = 1
.FitToPagesTall = 1
.PrintErrors = xlPrintErrorsDisplayed
.OddAndEvenPagesHeaderFooter = False
.DifferentFirstPageHeaderFooter = True
.ScaleWithDocHeaderFooter = True
.AlignMarginsHeaderFooter = True
.EvenPage.LeftHeader.Text = ""
.EvenPage.CenterHeader.Text = ""
.EvenPage.RightHeader.Text = ""
.EvenPage.LeftFooter.Text = ""
.EvenPage.CenterFooter.Text = ""
.EvenPage.RightFooter.Text = "&P / &N "
.FirstPage.LeftHeader.Text = ""
.FirstPage.CenterHeader.Text = ""
.FirstPage.RightHeader.Text = ""
.FirstPage.LeftFooter.Text = ""
.FirstPage.CenterFooter.Text = ""
.FirstPage.RightFooter.Text = ""
End With
Application.PrintCommunication = True
Next ws
Worksheets(Array("Deckblatt für Präsi", "1", "2", "3", "4", "5")).PrintOut Copies:=1, Collate:=True, IgnorePrintAreas:=False, ActivePrinter:="Adobe PDF"

Sheets("Übersicht").Select
Range("C4").Select

End Sub
PiotreBlicktsNet ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 14.11.2017, 11:17   #15
PiotreBlicktsNet
Threadstarter Threadstarter
Neuer Benutzer
Neuer Benutzer
Standard

Kann mir hierbei wirklich keiner helfen?

Ich will ja nicht drängeln, da ich aber in kürze OP bedingt die nächsten zwei Monate nicht mehr im Geschäft bin würde ich die Datei gerne soweit fertig haben, dass die Kollegen damit arbeiten können, ohne ständig das Makro anpassen zu müssen.

Ich bin für jeden Hinweis dankbar, der mich der Lösung auch nur ein bisschen näher bringt.
PiotreBlicktsNet ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Ads
Antworten


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Besucher: 1)
 
Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge anzufügen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

vB Code ist An.
Smileys sind An.
[IMG] Code ist An.
HTML-Code ist An.
Gehe zu


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:30 Uhr.


Partner und Co.
Access-Paradies -Alles rund um die Datenbank Microsoft Access -Code -Programme-Tools -Tipps   Kostenlose Tipps & Tricks, Downloads und Programme   www.kulpa-online.com - Tipps - Tricks - Tutorials - Meinungen - Downloads uvm...   vb@rchiv · Willkommen in der Welt der VB Programmierung   Access-Garhammer - Hier finden Sie jede Menge Beispiel-Datenbanken zu Access und mehr ...   mcseboard.de   Die Top Seite für Excel-VBA-Makros uvm.

Powered by: vBulletin Version 3.6.2 (Deutsch)
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.

Copyright ©2000-2010 MS-Office-Forum. Alle Rechte vorbehalten.
Copyright ©Design: Manuela Kulpa ©Rechte: Günther Kramer
Eine Verwendung der Inhalte in anderen Publikationen, auch auszugsweise,
ist ohne ausdrückliche Zustimmung der Autoren nicht gestattet.
Beachten Sie bitte auch unsere Nutzungsbedingungen.