Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

HPageBreaks & FitToPagesWide mit VBA

41 views
Skip to first unread message

Kai Ottenbacher

unread,
Mar 9, 2006, 3:49:19 PM3/9/06
to
Hallo Excelgemeinde,

ich habe ein Worksheet mit immer der gleichen Breite (Anzahl Spalten)
aber variierender Länge (Anzahl Zeilen). Diese will ich per Makro
ausdrucken. Dabei will ich ebenfalls per Makro abhängig von der Anzahl
der Zeilen Seitenumbrüche so festlegen, dass immer nach 36 Zeilen ein
Seitenumbruch eingefügt wird. Das versuchte ich mit den unten
stehenden Varianten zu lösen. Leider treten hierbei folg. Probleme
auf:
- beim "1. Versuch" schmeißt mir der Befehl "FitToPagesWide"
sämltiche Seitenumbrüche wieder raus
- beim "2. Versuch" kommt ab einer gewissen Anzahl Zeilen im Worksheet
die Fehlermeldung "Excel kann den Seitenumbruch nicht verschieben, da
sich dadurch die Skalierung unter den Minimalbereich von 10 % verlagern
würde". Dabei ist der mit "FitToPagesWide=1" korrelierende Zoomfaktor
etwa 80%...

Noch eine Info: Die ersten 8 Zeilen des Worksheet sind
Wiederholungszeilen die auf jedem Blatt gedruckt werden.

1. Versuch:
With ActiveSheet
For intCounter2 = 39 To intCounter1 Step 36
Set .HPageBreaks(1).Location = Rows(intCounter2)
For bytCounter1 = 1 To 30
.Rows(intCounter2 - bytCounter1).PageBreak =
xlPageBreakNone
Next bytCounter1
Next intCounter2
With .PageSetup
.FitToPagesWide = 1
End With
End With

2. Versuch:
With ActiveSheet
With .PageSetup
.FitToPagesWide = 1
End With
i = .HPageBreaks.Count
j = .Cells(Rows.Count, 1).End(xlUp).Row
.ResetAllPageBreaks
For j = 39 To j Step 36
Set .HPageBreaks(i - 1).Location = Rows(j)
Next j
End With

Ideen?

Vielen Dank im Voraus für alle Tipps!

Lieber Gruss, Kai

Kai Ottenbacher

unread,
Mar 9, 2006, 3:49:22 PM3/9/06
to

Michael Schüller

unread,
Mar 9, 2006, 7:14:44 PM3/9/06
to
Message has been deleted

Michael Schüller

unread,
Mar 9, 2006, 7:31:32 PM3/9/06
to
Hallo Kai,

> ich habe ein Worksheet mit immer der gleichen Breite (Anzahl Spalten)
> aber variierender Länge (Anzahl Zeilen). Diese will ich per Makro
> ausdrucken. Dabei will ich ebenfalls per Makro abhängig von der Anzahl
> der Zeilen Seitenumbrüche so festlegen, dass immer nach 36 Zeilen ein
> Seitenumbruch eingefügt wird.

Meiner Erfahrung nach hat XL grundsätzlich Probleme mit Seitenumbrüchen, die
per VBA eingefügt werden.
Die mir bekannten Probleme können umgangen werden, wenn vorher in die
"Seitenumbruch-Vorschau" umgeschaltet wird. Ob Dein Problem dazu gehört weiß
ich nicht...

Aber versuch's mal:

Vor "...PageBreak =...":
ActiveWindow.View = xlPageBreakPreview

Danach, um in die normale Ansicht zurückzuschalten:
ActiveWindow.View = xlNormalView


Das sollte IMHO auch funktionieren, wenn Du "ActiveWindow.View =
xlPageBreakPreview" vor _allen_ "...PageBreak =..."-Anweisungen setzt und
"ActiveWindow.View = xlNormalView" nach _allen_. D.h. in Deinem Code sollte
es ausreichen, die Zeilen vor und nach der "intCounter2"-Schleife zu setzen.
Falls das in Deinem Fall nicht hilft, versuch mal, die Zeilen am Anfang und
Ende des Codes zu setzen.


Hoffe ich konnte Dir helfen.

Schönen Gruß
--
Michael
michael....@gmx.de

Michael Schüller

unread,
Mar 9, 2006, 9:03:59 PM3/9/06
to
Nochmal hallo Kai,


> Vor "...PageBreak =...":
> ActiveWindow.View = xlPageBreakPreview
>
> Danach, um in die normale Ansicht zurückzuschalten:
> ActiveWindow.View = xlNormalView
>

Das gibt zugegebenermaßen ein unschönes "Geflacker" beim Ein- und
Ausschalten der Vorschau. Um dies zu unterbinden füge
Application.ScreenUpdating = False
vor
ActiveWindow.View = xlPageBreakPreview
ein.

Und
Application.ScreenUpdating = true
nach
ActiveWindow.View = xlNormalView
ein.

Damit verhinderst Du, dass die Bildschirmanzeige (innerhalb von XL)
aktualisiert wird.

Kai Ottenbacher

unread,
Mar 10, 2006, 8:38:49 AM3/10/06
to
Hallo Michael,

danke für deine Bemühungen, habe meinen Code deinen Vorschlägen
entsprechend angepasst, aber ab einer gewissen Anzahl von Zeilen kommt
immer die Fehlermeldung ""Excel kann den Seitenumbruch nicht


verschieben, da sich dadurch die Skalierung unter den Minimalbereich
von 10 % verlagern würde".

Sub TestDruck()
Application.ScreenUpdating = False
Dim intCounter1 As Integer, intCounter2 As Integer, intPageBreaks As
Integer
Dim bytCounter1 As Byte
ActiveWindow.View = xlPageBreakPreview
With ActiveSheet
intCounter1 = .Cells(Rows.Count, 1).End(xlUp).Row
intPageBreaks = .HPageBreaks.Count


For intCounter2 = 39 To intCounter1 Step 36

With .PageSetup
.FitToPagesWide = 1
End With

Set .HPageBreaks(intPageBreaks).Location = Rows(intCounter2)


For bytCounter1 = 1 To 30
.Rows(intCounter2 - bytCounter1).PageBreak =
xlPageBreakNone
Next bytCounter1
Next intCounter2
With .PageSetup
.FitToPagesWide = 1
End With
End With

ActiveWindow.View = xlNormalView
Application.ScreenUpdating = True
End SuB

Vorschläge?

Danke & Beste Grüße, Kai

Michael Schüller

unread,
Mar 17, 2006, 4:21:28 PM3/17/06
to
Hallo Kai,

> danke für deine Bemühungen, habe meinen Code deinen Vorschlägen
> entsprechend angepasst, aber ab einer gewissen Anzahl von Zeilen kommt
> immer die Fehlermeldung ""Excel kann den Seitenumbruch nicht
> verschieben, da sich dadurch die Skalierung unter den Minimalbereich
> von 10 % verlagern würde".

[...Code gelöscht...]

> Vorschläge?


Ich muss zugeben, dass ich mir Deinen Code nach Deinem ersten Posting nicht
detailliert angesehen habe. Nachdem ich das nachgeholt habe, denke ich, dass
der Code aus mehreren Gründen nicht funktionieren kann. Würde aber jetzt zu
weit führen. Sag bescheid, wenn Du mehr wissen willst.

Versuchs mal mit folgendem Code:

Sub test()
Dim vRow As Integer
Dim vUsedRows As Integer

With ActiveSheet

vUsedRows = .UsedRange.Rows.Count

For vRow = 37 To vUsedRows Step 36
.HPageBreaks.Add Before:=.Cells(vRow, 1)
Next vRow
End With

End Sub


Hoffe ich konnte Dir helfen.

Schönen Gruß
--
Michael
michael....@gmx.de

0 new messages