kann mir einer von Euch mal erklären, warum die Ausführung von diesem
Makro:
Sub Druckvorbereitung()
Dim Sh As Worksheet
For Each Sh In ActiveWorkbook.Worksheets
With Sh.PageSetup
.LeftFooter = "&8&F, &A, &D"
.LeftMargin = Application.InchesToPoints(0.43)
.RightMargin = Application.InchesToPoints(0.38)
.TopMargin = Application.InchesToPoints(0.47)
.BottomMargin = Application.InchesToPoints(0.47)
.HeaderMargin = Application.InchesToPoints(0.27)
.FooterMargin = Application.InchesToPoints(0.27)
.CenterHorizontally = True
.Orientation = xlPortrait
.PaperSize = xlPaperA4
.Zoom = False
.FitToPagesWide = 1
.FitToPagesTall = 1
.PrintErrors = xlPrintErrorsDisplayed
End With
Next
End Sub
über 12 Sekunden dauert?
Kann man das irgendwie beschleunigen? Ihr würdet mir so ca. pro Tag 10
Minuten meines Lebens schenken!
Tausend Dank im voraus für Eure Antwort.
Daniela Messer
Probier mal
Application.Screenupdating = False
am Anfang des Codes.
Application.Screenupdating = True
schliesst den Code sauber ab.
Urs
Mich würde mal reizen rauszubekommen wer da der Bremsklotz ist.
Vielleicht simpelst ein Debug.Print TIMER hinter (=unter) jede Zeile im
With-Block einfügen?
Vielleicht fressen auch im Dialog gar nicht nötige Anweisungen (weil sie
Standard sind oder sich nicht auswirken - vielleicht die Margins,
PaperSize...) Zeit?
(Drucke mittels PS-Druck[treiber] in Datei, dann könntest du mit GSView
[GhostGum] ohne Papierverschwendung probieren.)
--
Eric March
Kenne die Vergangenheit. In der Unwissenheit über die Vergangenheit
liegt das Verderben der Zukunft.
--
MfG EP
Entwicklung - Beratung - Training (www.dr-e-pfeifer.net)
(Microsoft Certified Application Developer)
neu: MS Office 2003 - Das Entwicklerbuch (ISBN 3-86063-688-X)
Daniela Messer schrieb am 29.05.2006
> kann mir einer von Euch mal erklären, warum die Ausführung von diesem
> Makro:
>
> Sub Druckvorbereitung()
>
> Dim Sh As Worksheet
> For Each Sh In ActiveWorkbook.Worksheets
.DisplayAutomaticPageBreaks = False
> With Sh.PageSetup
> .LeftFooter = "&8&F, &A, &D"
> .LeftMargin = Application.InchesToPoints(0.43)
> .RightMargin = Application.InchesToPoints(0.38)
> .TopMargin = Application.InchesToPoints(0.47)
> .BottomMargin = Application.InchesToPoints(0.47)
> .HeaderMargin = Application.InchesToPoints(0.27)
> .FooterMargin = Application.InchesToPoints(0.27)
> .CenterHorizontally = True
> .Orientation = xlPortrait
> .PaperSize = xlPaperA4
> .Zoom = False
> .FitToPagesWide = 1
> .FitToPagesTall = 1
> .PrintErrors = xlPrintErrorsDisplayed
> End With
> Next
> End Sub
>
> über 12 Sekunden dauert?
Das PageSetup-Objekt ist die Ursache - es ist grottenlangsam und kann nicht
beschleunigt werden :-(
Bei einer entsprechenden Anzahl Tabellenblätter dauert das dann halt.
In neueren Versionen scheint es besser geworden zu sein, aber sonst musst
Du damit leben.
Daher die Frage: Warum muss der Code jedesmal beim Drucken ablaufen?
Die Seitenränder und Fusszeilen dürften sich im laufenden Betrieb ja nicht
unbedingt veränderen.
Vielleicht hilft es auch, wenn Du die oben eingefügte Zeile noch
einbindest.
Mit freundlichen Grüssen
Thomas Ramel (@work)
--
- MVP für Microsoft-Excel -
[Win XP Pro SP-2 / xl2003 SP-1]
Microsoft Excel - Die ExpertenTipps:
(http://tinyurl.com/9ov3l und http://tinyurl.com/cmned)
vielen Dank für alle Eure Gedanken und Lösungsvorschläge an einen
Newsgroup-Leser, der leider nicht wirklich programmieren kann, sondern
den Makrorecorder einschaltet nach dem Motto "das muss doch irgendwie
zu machen sein".
Aus den meisten Antworten kann ich schlißen, dass ich mich schon mal
innerlich drauf gefasst machen sollte, dass man an der Schnelligkeit
des Makros nicht viel ändern kann. Nochmals zur Verwendung desselben:
ich bekomme verschieden Reporte als Excel file aus Indien, die alle
unterschiedliche Seitenlayouts haben - teilweise auf die Tatsache
zurückzuführen, dass in Indien DIN A4 nicht wirklich verbreitet ist.
Unsere Umwelt und Papierverbrauch sollte darunter natürlich so wenig
wie möglich leiden. Gibt's da wirklich kein vorgefertigtes Modul von
Microsoft oder so? Ich bin doch sicher nicht die einzige mit diesem
Problem und Microsoft wird mit der Papierindustrie ja wohl nicht im
Bunde stehen...
Jedenfalls will ich auf keine der untengenannten Einstellungen beim
Seite einrichten verzichten und hab alles überflüssige schon
rausgelöscht.
Lieber Urs,
Danke für deinen Tipp. Muss der Code jetzt so aussehen? Oder wo füge
ich deine Zeilen ein?
Sub Druckvorbereitung()
Application.ScreenUpdating = False
Dim Sh As Worksheet
For Each Sh In ActiveWorkbook.Worksheets
With Sh.PageSetup
.LeftFooter = "&8&F, &A, &D"
....
.PrintErrors = xlPrintErrorsDisplayed
End With
Next
Application.ScreenUpdating = True
End Sub
Hallo Thomas,
leider motzt MVB bei deiner Zeile :
.DisplayAutomaticPageBreaks = False
mit Laufzeitfehler 438, oder hab ich das falsch eingefügt?
Viele Grüße
Daniela Messer
Daniela Messer schrieb:
> Jedenfalls will ich auf keine der untengenannten Einstellungen beim
> Seite einrichten verzichten und hab alles überflüssige schon
> rausgelöscht.
leider braucht Excel für die Neuberechnung der Seiteneinstellungen sehr lange.
Je mehr Blätter desto länger dauert es :-(
Etwas schneller geht es, wenn du die Berechnung vorab auf manuell umstellst
und anschließend wieder zurück auf automatisch:
Application.Calculation =xlCalculationManual
' Dein Code
Application.Calculation =xlCalculationAutomatic
Mit freundlichen Grüssen
Melanie Breden
--
- Microsoft MVP für Excel -
Microsoft Excel - Die ExpertenTipps http://tinyurl.com/cmned
Das Excel-VBA Codebook http://excel.codebooks.de
Excel-Auftragsprogrammierung
Daniela Messer schrieb am 30.05.2006
> Aus den meisten Antworten kann ich schlißen, dass ich mich schon mal
> innerlich drauf gefasst machen sollte, dass man an der Schnelligkeit
> des Makros nicht viel ändern kann. Nochmals zur Verwendung desselben:
> ich bekomme verschieden Reporte als Excel file aus Indien, die alle
> unterschiedliche Seitenlayouts haben - teilweise auf die Tatsache
> zurückzuführen, dass in Indien DIN A4 nicht wirklich verbreitet ist.
OK, das ist dann ein Argument, das dafür spricht, die Einstellungen jeweils
explizit vorzunehmen.
> Jedenfalls will ich auf keine der untengenannten Einstellungen beim
> Seite einrichten verzichten und hab alles überflüssige schon
> rausgelöscht.
Das ist dann so OK, da kommst Du nicht darum herum.
> Hallo Thomas,
> leider motzt MVB bei deiner Zeile :
> .DisplayAutomaticPageBreaks = False
>
> mit Laufzeitfehler 438, oder hab ich das falsch eingefügt?
Wo genau hast Du denn die Zeile eingefügt?
...ich bemerke gerade noch einen Fehler darin:
Sh.DisplayAutomaticPageBreaks = False
Ich nochmal :-)
Daniela Messer schrieb am 30.05.2006
> Aus den meisten Antworten kann ich schlißen, dass ich mich schon mal
> innerlich drauf gefasst machen sollte, dass man an der Schnelligkeit
> des Makros nicht viel ändern kann. Nochmals zur Verwendung desselben:
> ich bekomme verschieden Reporte als Excel file aus Indien, die alle
> unterschiedliche Seitenlayouts haben - teilweise auf die Tatsache
> zurückzuführen, dass in Indien DIN A4 nicht wirklich verbreitet ist.
Teste doch als Alternative zu deinem Makro mal die folgenden zeieln:
Sub Druckvorbereitung_xl4()
head = """"""
foot = """&L&8&F, &A, &D"""
pLeft = 0.43
pRight = 0.38
Top = 0.47
Bot = 0.47
hdng = "False"
grid = "False"
h_cntr = "True"
v_cntr = "False"
orient = 2
paper_size = 9
pscale = "True"
pg_num = ""
pg_order = ""
bw_cells = ""
quality = ""
head_margin = 0.27
foot_margin = 0.27
Notes = "False"
Draft = "False"
pSetUp = "Page.Setup(" & head & "," & foot & "," & pLeft & ","
pSetUp = pSetUp & pRight & "," & Top & "," & Bot & "," & hdng & ","
pSetUp = pSetUp & grid & "," & h_cntr & "," & v_cntr & ","
pSetUp = pSetUp & orient & "," & paper_size & "," & pscale & ","
pSetUp = pSetUp & pg_num & "," & pg_order & "," & bw_cells & ","
pSetUp = pSetUp & quality & "," & head_margin & ","
pSetUp = pSetUp & foot_margin & "," & Notes & "," & Draft & ")"
Set ws = ActiveSheet
Worksheets.Select
Application.ExecuteExcel4Macro pSetUp
ws.Select
End Sub
Danke schön für deine Unterstützung und die Mühe, die
Programmierung anders anzugehen.
Leider meldet Excel den Laufzeitfehler 1004 bei der Zeile:
Application.ExecuteExcel4Macro pSetUp
Brauchst du vielleicht von mir noch Software-Info? Microsoft Excel 2003
SP2.
Viele Grüße
Daniela Messer
Daniela Messer schrieb am 30.05.2006
> Danke schön für deine Unterstützung und die Mühe, die
> Programmierung anders anzugehen.
Aber gerne doch; das PageSetup-Objekt ist halt grausam langsam, da lohnt es
sich, das auch mal anders zu versuchen.
> Leider meldet Excel den Laufzeitfehler 1004 bei der Zeile:
>
> Application.ExecuteExcel4Macro pSetUp
Ich habe den Code nun nochmal 1:1 kopiert und laufen lassen - ich konnte
den Fehler nicht feststellen.
Hattes Du ihn ebenfalls 1:1 übernommen?
> Brauchst du vielleicht von mir noch Software-Info? Microsoft Excel 2003
> SP2.
Das habe ich ebenfalls, wie gesagt, kein Fehler.
Kann es sein, dass Du auf einer englischen Version arbeitest?
Oder welche Sprachen sind bei dir in Verwendung?
ja, ich hab den Code von oben vollständig kopiert und in ein neues
Modul eingefügt. Dann hab ich F5 gedrückt und den Laufzeitfehler
ausgegeben bekommen.
Auch beim 2. Mal will's nicht klappen :o(
Kann ich die störende Zeile vielleicht weglassen? ;o)
Meine Sprache ist übrigens Deutsch.
Herzlichen Dank im voraus für weitere Tipps.
Daniela Messer
Daniela Messer schrieb am 30.05.2006
> ja, ich hab den Code von oben vollständig kopiert und in ein neues
> Modul eingefügt. Dann hab ich F5 gedrückt und den Laufzeitfehler
> ausgegeben bekommen.
Ok, das ist gut so...
> Auch beim 2. Mal will's nicht klappen :o(
...da natürlich weniger...
> Kann ich die störende Zeile vielleicht weglassen? ;o)
In Versuch wärs wert; es würde mich allerdings nicht wundern, wenn das gar
nichts passiert ;-))))
> Meine Sprache ist übrigens Deutsch.
Deutsch (Deutschland) nehem ich an - es könnte sich dann noch um eine
Angelegenheit der Ländereinstellungen handeln.
Versuche es daher mal mit der 'eingedeutschten' Version:
Sub Druckvorbereitung_xl4()
head = """"""
foot = """&L&8&F, &A, &D"""
pLeft = """0,43"""
pRight = """0,38"""
Top = """0,47"""
Bot = """0,47"""
hdng = "False"
grid = "False"
h_cntr = "True"
v_cntr = "False"
orient = 2
paper_size = 9
pscale = "True"
pg_num = ""
pg_order = ""
bw_cells = ""
quality = ""
head_margin = """0,27"""
foot_margin = """0,27"""
Notes = "False"
Draft = "False"
pSetUp = "Page.Setup(" & head & "," & foot & "," & pLeft & ","
pSetUp = pSetUp & pRight & "," & Top & "," & Bot & "," & hdng & ","
pSetUp = pSetUp & grid & "," & h_cntr & "," & v_cntr & ","
pSetUp = pSetUp & orient & "," & paper_size & "," & pscale & ","
pSetUp = pSetUp & pg_num & "," & pg_order & "," & bw_cells & ","
pSetUp = pSetUp & quality & "," & head_margin & ","
pSetUp = pSetUp & foot_margin & "," & Notes & "," & Draft & ")"
Set ws = ActiveSheet
Sheets.Select
Application.ExecuteExcel4Macro pSetUp
ws.Select
End Sub
Hmm, noch ein Gedanke - handelt es sich um Diagramm-Blätter oder normale
Tabellenblätter?
Thomas Ramel schrieb am 30.05.2006
> Daniela Messer schrieb am 30.05.2006
>
>> ja, ich hab den Code von oben vollständig kopiert und in ein neues
>> Modul eingefügt. Dann hab ich F5 gedrückt und den Laufzeitfehler
>> ausgegeben bekommen.
>
> Ok, das ist gut so...
>
>> Meine Sprache ist übrigens Deutsch.
>
> Deutsch (Deutschland) nehem ich an - es könnte sich dann noch um eine
> Angelegenheit der Ländereinstellungen handeln.
So, nun habe ich die Sache auch auf einem System mit Deutch(Deutschland)
getestet. Die folgenden Zeilen liefen bei mir unter beiden Einstellungen:
Sub Druckvorbereitung_xl4()
head = """"""
foot = """&L&8&F, &A, &D"""
pLeft = "0.43"
pRight = "0.38"
Top = "0.47"
Bot = "0.47"
hdng = "False"
grid = "False"
h_cntr = "True"
v_cntr = "False"
orient = 1
paper_size = 9
pscale = "True"
pg_num = ""
pg_order = ""
bw_cells = ""
quality = ""
head_margin = "0.27"
foot_margin = "0.27"
Notes = "False"
Draft = "False"
pSetUp = "Page.Setup(" & head & "," & foot & "," & pLeft & ","
pSetUp = pSetUp & pRight & "," & Top & "," & Bot & "," & hdng & ","
pSetUp = pSetUp & grid & "," & h_cntr & "," & v_cntr & ","
pSetUp = pSetUp & orient & "," & paper_size & "," & pscale & ","
pSetUp = pSetUp & pg_num & "," & pg_order & "," & bw_cells & ","
pSetUp = pSetUp & quality & "," & head_margin & ","
pSetUp = pSetUp & foot_margin & "," & Notes & "," & Draft & ")"
Set ws = ActiveSheet
Sheets.Select
Application.ExecuteExcel4Macro pSetUp
ws.Select
End Sub
Mit freundlichen Grüssen
Thomas Ramel
--
- MVP für Microsoft-Excel -
[Win XP Pro SP-2 / xl2000 SP-3]
Thomas Ramel schrieb:
> Teste doch als Alternative zu deinem Makro mal die folgenden zeieln:
> Sub Druckvorbereitung_xl4()
> head = """"""
> foot = """&L&8&F, &A, &D"""
> pLeft = 0.43
> pRight = 0.38
> Top = 0.47
> ...
>>Option Explicit<< nicht eingeschaltet?
SCNR ;-)
MfG
Michael
--
Michael Schwimmer http://michael-schwimmer.de
Excel VBA ISBN 3-8273-2183-2
Excel Programmierung - Das Handbuch ISBN 3-8606-3548-4
Michael Schwimmer schrieb am 31.05.2006
> Thomas Ramel schrieb:
>> Teste doch als Alternative zu deinem Makro mal die folgenden zeieln:
>> Sub Druckvorbereitung_xl4()
>> head = """"""
>> foot = """&L&8&F, &A, &D"""
>> pLeft = 0.43
>> pRight = 0.38
>> Top = 0.47
>> ...
>
>>>Option Explicit<< nicht eingeschaltet?
Hier eigentlich bewusst ausgeschaltet, um nicht jede Variable einzeln
deklarieren zu müssen.
Nun da das Problem mit den Ländereinstellungen gelöst ist, ist dies der
nächste Schritt um dann (endlich) mal ein Kraut gegen das träge
PageSetuo-Ojekt zu haben.
> SCNR ;-)
Nur zu ;-)
Mit freundlichen Grüssen
Thomas Ramel (@Laptop)
--
- MVP für Microsoft-Excel -
[Win XP Pro SP-2 / xl2000 SP-3]
Herzlichsten Dank an dich, Thomas!
Dafür kriegst du den Excel-Orden.
Viele Grüße von einer begeisterten
Daniela Messer
Daniela Messer schrieb am 01.06.2006
> Holla, das flutscht ja jetzt ganz ausgezeichnet!
> Nun ist nicht nur ein Tabellenblatt, sondern sogar eine ganze Datei in
> nullkommanix papier- und zeitsparend mit einem Tabellenblatt pro Seite
> formatiert und ausgedruckt.
Na, das freut mich aber; dann hat sich der Einsatz gelohnt :-))))
(Glücklicherweise waren keine Diagramme enthalten ;-))
Ich bin daran, die Datei noch aufzubereiten (Variablen-Deklaration z.B.,
Michael ;-) und mit entsprechenen Kommentaren und Beispielen zu den
einzelnen Parametern zu versehen.
Wenns denn mal soweit ist, stelle ich sie gerne hier in die NG, damit auch
andere das grottenlangsame PageSetup-Objekt umgehen können.
> Herzlichsten Dank an dich, Thomas!
> Dafür kriegst du den Excel-Orden.
Dankeschön - darf ich den zu den anderen hängen? ;-)
> Viele Grüße von einer begeisterten
Merci auch fürs Feedback.
Mit freundlichen Grüssen
Thomas Ramel (@work)
--
- MVP für Microsoft-Excel -
noch einmal reichlichen Dank an dich für dieses Feature.
Ein Mal im Monat muss ich sehr viel ausdrucken und das schaffe ich
jetzt an einem Tag, anstatt wie früher in 2 Tagen. Jippie.
Nun noch eine Frage, damit ich das Makro (?)/Code universell einsetzen
kann:
Ich hab hier ein Hochkomma gesetzt, damit nicht gleich alle Blätter,
sondern nur die ausgewählten formatiert werden
' Sheets.Select
Für maximalen Excel-Komfort wäre nun, wenn die ausgewählten Blätter
nach der Ausführung des Codes auch markiert/aktiviert bleiben.
Ansonsten muss ich sie nämlich zum drucken alle erneut anklicken...
Kannst du mir die vermutlich fehlende Codezeile noch schreiben?
Tausend Dank.
Daniela Messer
Daniela Messer schrieb am 14.06.2006
> noch einmal reichlichen Dank an dich für dieses Feature.
> Ein Mal im Monat muss ich sehr viel ausdrucken und das schaffe ich
> jetzt an einem Tag, anstatt wie früher in 2 Tagen. Jippie.
Aber gerne doch - es freut mich, dem Page-Setup endlich mal ein Schnippchen
geschlagen zu haben :-9
> Ich hab hier ein Hochkomma gesetzt, damit nicht gleich alle Blätter,
> sondern nur die ausgewählten formatiert werden
> ' Sheets.Select
Ja, das ist OK, so - Du kannst die Zeile auch ganz löschen.
> Für maximalen Excel-Komfort wäre nun, wenn die ausgewählten Blätter
> nach der Ausführung des Codes auch markiert/aktiviert bleiben.
> Ansonsten muss ich sie nämlich zum drucken alle erneut anklicken...
>
> Kannst du mir die vermutlich fehlende Codezeile noch schreiben?
Kommentiere einfach die letzte Zeile hier:
ws.Select
auch noch aus oder lösche sie.
wunderbar, klappt alles. Herzlichen Dank!
Viele Grüße
Daniela Messer