Wie kann ich Excel zwingen, Seitenumbrüche korrekt zu zählen?

8

Ich sollte einige große Datenbereiche von Excel nach Powerpoint exportieren, eine Seite pro Folie, und natürlich sollte ich die Seitenumbrüche behandeln, um "verwaisten" Zeilen oder Spalten zu vermeiden.

Ich versuche zu überprüfen, wie viele Seiten ich vertikal und horizontal mit einem bestimmten Zoom haben würde, indem ich HPageBreaks.Count und VPageBreaks.Count lese und dann manuell die Position jedes Bruches definiere. Die Idee ist, ungefähr die gleiche Breite und Höhe auf jeder Seite zu haben.

Wenn ich meinen Code Schritt für Schritt debugge, läuft er gut und die Logik scheint in Ordnung, aber wenn ich ihn "frei" benutze, sind die Seitenumbrüche komplett ausgeschaltet. Wenn ich einige MsgBox-Anweisungen hinzufüge, sehe ich, dass wenn ich HPageBreaks.Count (oder vertikal) lese, die falschen Werte erhalten werden. (Ich kann die richtigen überprüfen, wenn ich manuell mache, was der Code tun soll).

Wenn ich in vielen Foren suche, sehe ich einige hässliche Problemumgehungen wie das Erzwingen eines Zurücksetzens von PaperSize (ws.PageSetup.PaperSize = ws.PageSetup.PaperSize). Nachdem Sie einige von ihnen ausprobiert hatten, schien es besser zu sein, PrintCommunication vor einem Wechsel zu PageSetup zu deaktivieren und dann wieder einzuschalten. Dies funktionierte gut auf den meisten meiner Blätter, aber auf den wirklich großen (~ 750 Zeilen x 80 Spalten, fast alle Zellen mit Formeln), tut es einfach nicht.

Hier ein Auszug aus dem Code:

%Vor%

Irgendwelche Ideen, warum das passiert und wie kann ich das lösen?

Danke,

    
Edgard 25.04.2016, 14:44
quelle

2 Antworten

2

Ich schlage einen allgemeinen Hinweis zu dem Problem vor, wenn VBA-Code funktioniert, während F8 im Debug-Modus gedrückt wird, aber es funktioniert nicht, nachdem Sie F5 gedrückt haben, um das gesamte Makro auszuführen .

Hinweis 1. Verwenden Sie ThisWorkbook.ActiveSheet anstelle von ActiveWorkbook.ActiveSheet , wenn möglich, um auf das richtige Blatt zu verweisen. Verwenden Sie ThisWorkbook.Application anstatt nur Application. Es könnte sein, dass Sie ein anderes Addin-Programm im Hintergrund bearbeiten und ActiveSheet auf etwas anderes setzen, das Ihnen vielleicht nicht bekannt ist. Überprüfen Sie, ob andere Makros aktiviert sind und entfernen Sie alles, was Sie nicht verwenden. Bevor Sie also etwas Wichtiges in Ihrem Code eingeben, versuchen Sie, den Fokus für Ihr Blatt mit ThisWorkbook.Activate zu erhalten. Siehe das Diagramm auf dieser Seite: Ссылка

Hinweis 2. Erzwinge, dass Excel anders wartet als DoEvents .

%Vor%

Ссылка Ссылка

Oder alternativ:

%Vor%

Ссылка

Tipp 3. Wenn das obige noch immer nicht für die Aktualisierung funktioniert:

%Vor%

Ссылка

    
Przemyslaw Remin 11.05.2016 14:27
quelle
0

Eine andere Problemumgehung für mich war, die PrintArea neu zu setzen (ohne .PrintCommunication = false)

%Vor%

Diese Problemumgehung wirkt sich nicht auf Seiteneinstellungen aus (anders als die .Zoom-Eigenschaft)

Das Problem tritt nur auf, wenn das PageView auf xlPageLayoutView festgelegt ist und sich beim Ausführen des Makros Daten "außerhalb" des Druckbereichs befinden (UsedRange ist größer als PrintArea).

So können Sie überprüfen, ob sich das Blatt in PageLayoutView befindet, bevor Sie die Problemumgehung ausführen. Wenn sich das Blatt in einer anderen Ansicht befindet, funktioniert die pagebreaks.count immer hier.

    
Stiebl 27.03.2018 15:49
quelle

Tags und Links