meierjo
Goto Top

EXCEL 2010 VBA Fusszeile erstellen

Hallo zusammen

mittels folgendem Code-Schnipsel erstelle ich per VBA eine Fusszeile

With ActiveSheet.PageSetup
'so lauten die Zeilen, wenn Application.PrintCommunication = off
.LeftFooter = "&A"
.CenterFooter = "Seite &P von &N"
.RightFooter = "&F"
.LeftMargin = Application.InchesToPoints(0.19685)
.RightMargin = Application.InchesToPoints(0.19685)
.TopMargin = Application.InchesToPoints(0.19685)
.BottomMargin = Application.InchesToPoints(0.31496)
.HeaderMargin = Application.InchesToPoints(0)
.FooterMargin = Application.InchesToPoints(0)
.Orientation = xlLandscape
End With

Soweit kein Problem.

Nun hat ja aber Excel ein Problem mit der Geschwindigkeit, wenn in VBA Fusszeilen programmiert werden.

Wenn ich vor dem PageSetup
Application.PrintCommunication = False und nach dem PageSetup wieder auf True zurückstelle, läuft der Code wesentlich schneller (ca Faktor 10 schneller)

Siehe http://www.xing.com/net/vbatreff/office-2007-2010-vba-657492/druckenvor ...

Problem ist nun, dass die Befehle anders heissen müssen:
'so lauten die Zeilen, wenn Application.PrintCommunication = on
.LeftFooter = "&B"
.CenterFooter = "Seite &S von &A"
.RightFooter = "&N"

Dies wäre ja noch zu umgehen, aber wenn ich links, zentrisch und rechts gleichzeitig eine Fusszeile eingeben will, überschreibt er mir die Fusszeile mit irgendwelchen Werten, die ich nicht nachvollziehen kann.

zB links &R, in der mitte Seite 1 von, und rechts bleibt leer

Links, zentrisch oder rechts einzeln funktionieren

Kann jemand diesen Fehler von Excel bestätigen? Gibt's da eine Lösung dafür?

Danke und gruss meierjo

Content-ID: 222604

Url: https://administrator.de/contentid/222604

Ausgedruckt am: 04.12.2024 um 08:12 Uhr

colinardo
colinardo 21.11.2013 aktualisiert um 13:30:29 Uhr
Goto Top
Hallo Meierjo,
sorry deine Beschreibung ist etwas wirr,
Zitat von @Meierjo:
Problem ist nun, dass die Befehle anders heissen müssen:
'so lauten die Zeilen, wenn Application.PrintCommunication = on
.LeftFooter = "&B"
.CenterFooter = "Seite &S von &A"
.RightFooter = "&N"
verstehe nicht was du mit diesen Fußzeilen-Codes erreichen willst:
&B = Turns bold printing on or off. (Willst du eine vorhandene Fußzeile fett formatieren ?)
&S = Turns strikethrough printing on or off.
&A = Prints the name of the workbook tab.

Mit deinen angegebenen Codes sähe deine Fußzeile bspw. so komisch aus:
Links Mitte Rechts
Seite von Tabelle1 10
Siehe dazu: http://msdn.microsoft.com/en-us/library/office/ff822794.aspx

Dies wäre ja noch zu umgehen,
Was willst du umgehen ???

aber wenn ich links, zentrisch und rechts gleichzeitig eine Fusszeile eingeben will,
überschreibt er mir die Fusszeile mit irgendwelchen Werten, die ich nicht nachvollziehen kann.
Kann jemand diesen Fehler von Excel bestätigen?
Kann ich hier auf mehreren Office 2010 Systemen nicht nachvollziehen

Grüße Uwe
Meierjo
Meierjo 21.11.2013 aktualisiert um 14:21:31 Uhr
Goto Top
Hallo Uwe

Habe zum besseren Verständnis mal eine Beispiel-Mappe auf unseren FTP hochgeladen:
ftp://beispiel:Uze9ybene@ftp.heggli-gubler.ch

Dort sind 20 Tabelle drin, die mit der Fusszeile versehen werden sollen.
Werden im Makro die beiden Zeilen
'Application.PrintCommunication = False und
'Application.PrintCommunication = True auskommentiert, werden die Fusszeilen korrekt erstellt.
Links der Tabellen-Name
mittig :Seite 1 von 1
rechts der Arbeitsmappen-Name

Allerdings ist die Laufzeit für dieses kleine Makro bei meinen PC ~28 Sec, was zu lange ist.

Also habe ich laut: http://www.xing.com/net/vbatreff/office-2007-2010-vba-657492/druckenvor ... am anfange des Codes die Zeile 'Application.PrintCommunication = False eingegeben, was den Code wirklich sagenhaft beschleunigt.
Allerdings stimmt dann die Fusszeilen-Formatierung nicht mehr. Mir kommt es so vor, als ob bei der schnelleren Variante die Formatcodes für manuelle Eingabe verwendet werden müssen.

http://www.at-exceltraining.de/index.php/fragen-a-anworten-zu-excel/47- ...

Ich hoffe, meine Beschreibung ist nun verständlicher.

Gruss meierjo
colinardo
colinardo 21.11.2013 aktualisiert um 14:56:22 Uhr
Goto Top
Ich hoffe, meine Beschreibung ist nun verständlicher.
alles klar, das du das in einer Schleife verwendest hatte mir gefehlt ..
Eine wirkliche Lösung dafür gibt es nicht, aber anscheinend soll dieser Fehler nur bei den Kopf- und Fußzeilen auftreten.
D.h. du könntest mal versuchen nur für die Eigenschaften der Footer PrintComunication einzuschalten und für alle anderen Eigenschaften auszuschalten, vielleicht verringert sich dann die benötigte Zeit auf deinem Rechner. Hier geht's in unter 1 Sekunde...

With ActiveSheet.PageSetup

     Application.PrintCommunication = False
    .LeftMargin = Application.InchesToPoints(0.19685)
    .RightMargin = Application.InchesToPoints(0.19685)
    .TopMargin = Application.InchesToPoints(0.19685)
    .BottomMargin = Application.InchesToPoints(0.31496)
    .HeaderMargin = Application.InchesToPoints(0)
    .FooterMargin = Application.InchesToPoints(0)
    .Orientation = xlLandscape
     
     Application.PrintCommunication = True
    .LeftFooter = "&A"  
    .CenterFooter = "Seite &P von &N"  
    .RightFooter = "&F"  
End With

Grüße Uwe
colinardo
colinardo 21.11.2013 aktualisiert um 15:08:10 Uhr
Goto Top
Ich würde außerdem die Schleife mal anders schreiben, damit nicht jedes Sheet "manuell" selektiert wird:

Sub Fusszeile()
    Dim StartZeit, EndZeit, Laufzeit As Date
    Dim i%
    StartZeit = Now
    For i = 1 To Worksheets.Count
        Application.PrintCommunication = False
        With Worksheets(i).PageSetup
            .LeftMargin = Application.InchesToPoints(0.19685)
            .RightMargin = Application.InchesToPoints(0.19685)
            .TopMargin = Application.InchesToPoints(0.19685)
            .BottomMargin = Application.InchesToPoints(0.31496)
            .HeaderMargin = Application.InchesToPoints(0)
            .FooterMargin = Application.InchesToPoints(0)
            .Orientation = xlLandscape

            Application.PrintCommunication = True
            .LeftFooter = "&A"  
            .CenterFooter = "Seite &P von &N"  
            .RightFooter = "&F"  
        End With
    Next i
    
    EndZeit = Now
    Laufzeit = EndZeit - StartZeit
    MsgBox "Bearbeitunsgszeit: " & Laufzeit, vbOKOnly  
End Sub
Meierjo
Meierjo 21.11.2013 um 15:31:01 Uhr
Goto Top
Hallo Uwe

Ja, diese Version läuft bei mir auch unter 1 Sekunde. Aber wenn Application.PrintCommunication = False auskommentiert wird, dann dauerts auch bei dir länger, oder??

Gruss Meierjo
colinardo
colinardo 21.11.2013 aktualisiert um 15:34:54 Uhr
Goto Top
Zitat von @Meierjo:
Ja, diese Version läuft bei mir auch unter 1 Sekunde. Aber wenn Application.PrintCommunication = False auskommentiert wird,
dann dauerts auch bei dir länger, oder??
nö. (Core i7 860 2,8GHz 4 Kern 8GB Ram, Win7x64)
denke das liegt aber zusätzlich am verwendeten Drucker etc.
Meierjo
Meierjo 21.11.2013 um 15:38:49 Uhr
Goto Top
Hallo

Ok, bei mir ist ein Netzwerkdrucker als Default hinterlegt. Kann das was damit zu tun haben?

Werde deine Versionen mal in den fertigen Code einbauen, und dir berichten, was Sache ist.

Danke dir vorerst mal.

Gruss meierjo
colinardo
colinardo 21.11.2013 um 15:42:45 Uhr
Goto Top
Zitat von @Meierjo:
Ok, bei mir ist ein Netzwerkdrucker als Default hinterlegt. Kann das was damit zu tun haben?
Oh ja, mach mal testweise einen lokalen zum Standarddrucker...
Meierjo
Meierjo 21.11.2013 um 15:51:26 Uhr
Goto Top
Hallo

Ok, mit Standrard-Drucker rennt das wie der Teufel. Auf sowas wäre ich nie gekommen.

Ja, man lernt immer wieder dazu.

Danke dir vielmal für deine Hilfe.

Gruss meierjo