Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1024to1028
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Seitenumbruch

Seitenumbruch
18.11.2008 10:16:00
KViertel
Hallo in die Runde,
Ich kaue an einem Problem, bei dessen Lösung ich eure Hilfe erhoffe.
Es handelt sich darum, dass ich eine Tabelle, die durch eine Auswertung gefüllt wird ausdrucken möchte.
Da die Tabelle dynamisch von unterschiedlichen Ausgangswerten gefüllt wird, müssen jeweils die Seitenumbrüche unterschiedlich eingefügt werden, damit nicht zusammengehörende Teilgruppen auseinander gerissen werden.
Dazu selektiere ich die 1. Spalte (da die Zwischensummen in der ersten Spalte leer sind) und sammle in einer Matrix die Zeilennummern der leeren Zeilen. Vorher habe ich mit "Activesheet.ResetAllPageBreaks" alle vorher durch eine andere Auswertung gesetzten Seitenumbrüche gelöscht.
Da insgesamt jeweils 32 Zeilen auf dem Ausdruck untergebracht werden, und die ersten 5 Zeilen auf jedem Blatt wiederholt werden, prüfe ich ob der akt. Wert > als (25 * Zahl der Umbrüche) ist. Wenn ja, dann setze in der Zeile des Matrixindex -1 den Seitenumbruch.
Das funktioniert auch aus meiner Sicht gut. Aber ich habe jetzt dauernd im Bereich der Zeilen um 40 einen automatischen Umbruch, der sich ohne Probleme händig auf den nächsten vorgesehenen SB verschieben läßt. Dadurch erhalte ich aber immer einen nicht vorgesehenen SB und eine zerpflügte Tabelle.

Sub umbruch()
Dim umb() As Integer
ws_A.Activate
ActiveSheet.ResetAllPageBreaks
Range("A6").Select
drow = Range("A65536").End(xlUp).Row
dcol = Range("A65536").End(xlUp).Column
ws_A.Range(Cells(6, dcol), Cells(drow, dcol)).Select
n = 1
For Each u In Selection
X = u.Value
If X = "" Or Left(X, 2) = "FA" Then
ReDim Preserve umb(n)
umb(n) = u.Row
n = n + 1
End If
Next
'weil der Zähler n jetzt um 1 größer ist als der größte Index der Matrix "umb" ist
'wird n um 1 reduziert
n = n - 1
umb1 = 1 'Zähler der Umbrüche
For i = 1 To n
u1 = umb(i)
If i + 1  (25 * umb1) Then
Range(Cells(u1 + 1, dcol), Cells(u1 + 1, dcol)).Select
ActiveSheet.HPageBreaks.Add before:=Selection
umb1 = umb1 + 1
End If
Next
End Sub


Mache ich hier evtl einen gedanklichen Fehler oder was könnte der Grund dafür sein, dass diese automatischen Umbrüche eingefügt werden.
MfG. Klaus

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Seitenumbruch
18.11.2008 11:38:00
fcs
Hallo Klaus,
probiere es mal mit folgender Anpassung.
Gruß
Franz

Sub umbruch()
Dim umb() As Integer
ws_A.Activate
ActiveSheet.ResetAllPageBreaks
Range("A6").Select
drow = Range("A65536").End(xlUp).Row
dcol = Range("A65536").End(xlUp).Column
n = 1
For Each u In Range(Cells(6, dcol), Cells(drow, dcol))
X = u.Value
If X = "" Or Left(X, 2) = "FA" Then
ReDim Preserve umb(n)
umb(n) = u.Row
n = n + 1
End If
Next
'weil der Zähler n jetzt um 1 größer ist als der größte Index der Matrix "umb" ist
'wird n um 1 reduziert
n = n - 1
u1 = Range("A6").Row '1. Zeile unter Kopfzeilen
For I = 1 To n
Do
I = I + 1
If I > n Then Exit For
u2 = umb(I)
Loop Until u2 - u1 > 25
'Seitenwechsel am vorherigen Zeilenwert setzen
ActiveSheet.HPageBreaks.Add before:=Cells(umb(I - 1), 1)
u1 = umb(I - 1) '1. Zeile nach Seitenwechsel merken
'For-Schleifen Zähler um 1 reduzieren
I = I - 1
Next
End Sub


Anzeige
AW: Seitenumbruch
18.11.2008 15:00:49
KViertel
Hallo Franz,
danke für Deinen Code. Ich habe ihn ausprobiert und er funktioniert vom Ergebnis her wie meiner. Aber mein Problem besteht nach wie vor. Bei den letzten Versuchen, wurden jeweils die automatischen Seitenumbrüche nicht beseitigt, so dass zu den gesetzten, die automatischen dazu kommen.
In dem Moment wo die bisher gesetzten Umbrüche gecancelt werden, erscheinen die automatischen. Diese sollten sich den gesetzten unterordnen, d.h. verschwinden. Teilweise bleibt nur ein automatischer Umbruch erhalten, teils alle.
Da die Arbeitsmappe an Mitarbeiter herausgegeben wird und die Auswertung Daten enthält, die nicht manipulierbar sein dürfen , werden nach dem Druckauftrag, die betroffenen Tabellen mit veryHidden für den Normalnutzer nicht sichtbar versteckt. Deshalb ist es für mich wichtig, diesen Prozess richtig ans laufen zu bringen.
MfG. Klaus
Anzeige
AW: Seitenumbruch
19.11.2008 10:45:07
KViertel
Hallo,
da mein Problem mit den automatischen Seitenumbrüchen noch nicht beseitigt ist, bin ich jetzt auf die Idee gekommen, während der Prüfung auf die leeren Felder zu prüfen, ob sie einen Zeilenumbruch enthält. Wenn ja, dann löschen.
Wie lautet der Befehl, mit dem ich die Zeile auf HPagebreaks prüfen kann? Evtl. ob manuell oder automatisch gesetzt?
Grundsätzliche Frage: Muss ich evtl. explizit auf manuellen Umbruch einstellen, oder passiert das automatisch, wie von mir vermutet? Wenn ja, wie?
MfG. Klaus
AW: Seitenumbruch
19.11.2008 13:43:00
KViertel
Hallo,
das Problem scheint gelöst, denn es hat anscheinend etwas damit zu tun, dass ich bei der Seiteneinrichtung vorgegeben habe, dass die ersten 5 Zeilen auf jeder Seite der Übersichtlichkeit wegen wiederholt werden sollen.
Jetzt habe ich diese Bereichsangabe entfernt, und die Seitenumbrüche stimmen.
Jetzt muss ich mir wahrscheinlich einen anderen Lösungsweg suchen.
MfG. Klaus
Anzeige
AW: Seitenumbruch
19.11.2008 13:59:00
fcs
Hallo Klaus,
die Titelzeilen sollten eigentlich nicht das Problem sein.
Wenn du je Seite 25 Zeilen drucken kannst und 5 Titelzeilen hast, dann muss du die "manuellen Seitenwechsel halt so setzen, dass max. 20 Datenzeilen auf jede Seite kommen.
Hier mal meine Testdatei.
https://www.herber.de/bbs/user/56944.xls
Gruß
Franz
AW: Seitenumbruch
21.11.2008 09:37:00
KViertel
Hallo Franz,
danke für Deine Info. Kann mich leider erst heute wieder mit meinem Problem befassen.
Mein Muster würde so aussehen:
K1
K2
K3
K4
K5
bez1
bez11
bez12
bez2
bez21
bez22
bez23
bez24
bez3
bez31
bez32
bez4
bez41
bez42
bez43
FA
FA
Erst 5 Kopfzeilen, dann dyn. Anzahl von Auswertungszeilen, dann eine leere zelle, die weiter rechts eine Zwischensumme enthält. Bis zu den FA-Zeilen, die beiden Auswertungen über Alles enthalten.
Wenn ich ohne den auf jeder neuen Seite gedruckten Kopf arbeite, dann erfolgt der Umbruch immer so, dass keine Gruppe geteilt wird und nach der Zwischensummenzeile der Seitenumbruch erfolgt. So dass dann 1,2 oder 3 Gruppen auf dem Blatt erscheinen (abhängig von der Zeilenzahl der Gruppe, meist 4-6) ohne dass zB. die Zwischensummenzeile auf dem nächsten Blatt steht. Mit der Definition des Wiederholungsbereichs funktioniert das nicht mehr. Ich muss jetzt also suchen, ob ich einen Weg finde, wie ich die Umbruchpunkte nach jedem Umbruch verschieben muß, dass es trotzdem klappt.
MfG. Klaus
Anzeige
AW: Seitenumbruch
21.11.2008 11:34:00
fcs
Hallo Klaus,
ich hab nochmals gebastelt.
Bezeichnungs-Blöcke und Zwischensummen-Blöcke werden jetzt nicht mehr getrennt.
Das Makro ist aber ziemlich langsam, da die Verarbeitung der Seitenwechsel-Information unter VBA nicht so zügig funktioniert.
Gruß
Franz

Sub umbruchNeu()
Dim umb() As Integer, lngZeile As Long
Dim lngGrpStart As Long, lngBezStart As Long, lngSeite As Long
ws_A.Activate
ActiveSheet.ResetAllPageBreaks
Range("A6").Select
drow = Range("A65536").End(xlUp).Row
dcol = Range("A65536").End(xlUp).Column
n = 1
For lngZeile = 6 To drow
lngGrpStart = lngZeile
'Zeilen abarbeiten, bis 2 Zeilen mit "FA" in Spalte kommen
Do Until Left(Cells(lngZeile - 1, dcol), 2) = "FA" And Left(Cells(lngZeile - 2, dcol), 2)  _
= "FA"
'Merken wenn Leerzeile auftritt
If Cells(lngZeile - 1, dcol) = "" And Left(Cells(lngZeile, dcol), 2)  "FA" Then
lngBezStart = lngZeile 'Leerzeile vor Bezeichnungs-Block
lngFA_Start = 0
ElseIf Cells(lngZeile - 1, dcol) = "" And Left(Cells(lngZeile, dcol), 2) = "FA" Then
lngFA_Start = lngZeile 'Leerzeile vor FA-Block
lngBezStart = 0
End If
'Prüfen auf automatischen Seitenwechsel und ggf. Wechsel an Beginn des Blocks setzen
If Cells(lngZeile, 1).EntireRow.PageBreak = xlPageBreakAutomatic Then
If lngBezStart > 0 Then
Cells(lngBezStart, 1).EntireRow.PageBreak = xlPageBreakManual
lngSeite = lngBezStart
lngBezStart = 0
ElseIf lngFA_Start > 0 Then
Cells(lngFA_Start, 1).EntireRow.PageBreak = xlPageBreakManual
lngSeite = lngFA_Start
lngFA_Start = 0
End If
End If
lngZeile = lngZeile + 1
If lngZeile = drow Then Exit Do
Loop
lngZeile = lngZeile + 1
lngGrpEnde = lngZeile
'Seitenwechsel ggf. vor FA-Zeileblock setzen
If lngGrpEnde  lngSeite + 25 Then
Cells(lngGrpEnde, 1).EntireRow.PageBreak = xlPageBreakManual
lngSeite = lngGrpEnde
End If
Next
MsgBox "Fertig"
End Sub


Anzeige
AW: Seitenumbruch
24.11.2008 20:10:04
KViertel
Hallo Frank,
ich bedanke mich für Deinen Code, der mein Problem löst. Ich habe die ganze Zeit nach den Funktionen gesucht, über die ich automatische und manuelle Umbrüche identifizieren kann, bin aber nirgends darauf gestoßen. Nochmals vielen Danke für die Arbeit, die Du Dir gemacht hast.
MfG. Klaus

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige