Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Anzeige
Inhaltsverzeichnis

VBA: Seitenumbrüche nach Bedingungen

Forumthread: VBA: Seitenumbrüche nach Bedingungen

VBA: Seitenumbrüche nach Bedingungen
25.05.2025 19:32:42
Chense
Hallo zusammen,

ich bin heute mal wieder auf die Schwarzintelligenz angewiesen.

Ich bekomme aus einem Programm einen Wartungsplan in Excel exportiert. Dieser muss nun nach unserer "CI" formatiert werden.

Das funktioniert soweit mit einem Makro auch ganz gut ... bis auf die Seitenumbrüche:

Ich habe folgende Voraussetzungen:

Gegliedert ist das Ganze so:
0 (Hauptüberschritft)
0.1 (Unterüberschrift)
0.1.1 (Punkt 1)
0.1.2
0.2
0.2.1
...
1 (Hauptüberschrift)

Alle Überschriften sind fett
Hauptüberschriften sind zusätzlich unterstrichen
In den Wartungspunkten gibt es unterschiedliche Levels von verbundenen Zellen aus dem Export aber die Spalte in der gegliedert wird umfasst immer einen ganzen

Ich will nun automatisch nach folgendem Schema Seitenumbrüche einfügen:
- Seitenumbruch vor jeder Hauptüberschrift (funktioniert)
- Zähle vom letzten automatischen Seitenumbruch zurück bis zur ersten Unterüberschrift
--> Befindet sich zwischen der 20. Zeile einer Seite und dem automatischen Umbruch eine Unterüberschrift dann setze dort den Seitenumbruch
--> Befindet sich zwischen der 20. Zeile einer Seite und dem automatischen Umbruch KEINE Unterüberschrift, dann setze den Seitenumbruch nach der letzten verbundenen Zelle die ganz auf das Blatt passt.

Ich habe hier verschiedene Methoden ausprobiert die ich gefunden habe und versucht habe zu kombinieren aber entweder diese funktionieren garnicht oder nur teilweise.

Vielen Dank für die Hilfe!
Anzeige

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Schwarzintelligenz
25.05.2025 19:54:08
RPP63
Moin!
Dein bisheriges Makro iVm der Datei stellst Du nicht vor, weil …?

Fragt sich Ralf
AW: VBA: Seitenumbrüche nach Bedingungen
26.05.2025 16:34:37
daniel
Hi
eine Beispieldatei, in der du mal von Hand einzeichnest, wo du dir die Zeilenumbrüche wünschst, wäre hilfreich.
Auch würde dein bisheriger Code nicht schaden.

ich würde hier gar nicht mit den automatischen Zeilenumbrüchen arbeiten, sondern alle selber setzen.
das Problem ist, dass jeder neu eingefügte harte Zeilenumbruch die darunter liegenden verschiebt, Excel diese aber nicht sofort neu ermittelt, wenn du das in VBA machst.
hierzu kannst du von jeder Zelle die Pixelpostion ermitteln (linke obere Ecke: Cells(1, 1).Top) oder die Anzahl Pixel die ein Zellbereich hoch ist (Range(...).Height)

wenn du dir jetzt noch ermittelst, wieviele Pixel eine Seite mit deiner Seiteneinrichung maximal haben kann, solltet du dir selber ausrechnen können, wo die einzelnen Seitenumbrüche gesetzt werden müssen.
wenn du auch verbundene Zellen hast, dann kannst du den Verbundbereich für eine Zelle mit Cells(x, y).MergeArea ermitteln.

das mal so als Inspiration für eine eigene Programmierung.

Gruß Daniel
Anzeige
AW: VBA: Seitenumbrüche nach Bedingungen
27.05.2025 18:23:32
Chense
Hallo zusammen,

erstmal entschuldigt die späte Rückmeldung.

Die eigentliche Datei (mit Inhalten) kann ich nicht hochladen. Ich kann aber wenn euch das hilft gerne eine Datei hochladen in der nur die Formatierung enthalten ist in der ich die Daten bekomme und wie ich die Seitenumbrüche gerne hätte. Hilft das?

Hier jedenfalls mal der letzte von verschiedenen Ansätzen die ich versucht habe:



Dim lz As String
lz = ActiveSheet.UsedRange.SpecialCells(xlCellTypeLastCell).Row
Dim sh As Worksheet
Set sh = ThisWorkbook.ActiveSheet

Dim i as Integer
Dim n as Integer
Dim o as Integer
Dim p as Integer

o = 0
p = 1
For i = 1 To lz - 1
If sh.HPageBreaks.Count > 0 Then
If i = sh.HPageBreaks(p).Location.Row Then
p = p + 1
n = i
o = i - 20
For n = i To o Step -1
If Cells(n, 1).Font.Bold = True Then
sh.HPageBreaks.Add Cells(n, 1)
i = n
Exit For
End If
Next
If Cells(i, 1).MergeCells = True Then
i = Cells(i, 1).MergeArea.Row
sh.HPageBreaks.Add Cells(i, 1)
Else
sh.HPageBreaks.Add Cells(i, 1)
End If
End If
End If
Next


Die Idee dahinter war auf den ersten automatischen Pagebreak zu gehen
von diesem 20 Zeilen nach oben zählen:
-> ist in den 20 Zeilen eine Überschrift wird dort der Break gesetzt
-> ist keine Überschrift da wird der Break hart am Seitenende (über der verbundenen Zelle) gesetzt

Ich bekomme aber kuriose Ergebnisse:
- Teilweise wird der Break trotzdem in verbundenen Zellen gesetzt
- Teilweise werden Überschriften die sich innerhalb der 20 Zeilen befinden sollten nicht erkannt
- Am Ende bekomme ich einen RuntimeError 9
Anzeige
AW: VBA: Seitenumbrüche nach Bedingungen
27.05.2025 20:45:00
daniel
Hi
Datei mit Formatierung hochladen und ggf die Zellen wo was drin steht, mit irgendeinem Zeichen füllen, das würde helfen.

wie gesagt, ich würde nicht die automatischen Pagebreaks verwenden, weil die meines Wissen nach nicht immer sofort korrekt neu berechnet werden, wenn man einen harten Pagebreak setzt.

ich würde so vorgehen:
1. ermittle, wieviele Pixel auf eine seite passen. Hierzu einfach die Zelle unterhalb des ersten automatischen pagepbreaks selektieren und dim Direktfenster mit:
?Selection.Top ausgeben lassen. jetzt weißt du soviele Pixel passen auf eine Seite . diesen Wert musst du dir speichern

2. schleife dann von oben nach unten durch die Zellen. Immer wenn die Differenz von Top-Wert der aktuellen Zeile und dem Top-Wert des letzen von dir gesetzten Umbruchs (am anfang natürlich 0) größer ist als der Platz auf einer Seite, musst du einen Seitenumbruch einfügen. Dabei prüfst du, ob die Zelle zu einem Zellbverbund gehört (merge.Area) und setzt den Zeilenumbruch oberhalb des Zellverbundes.

Gruß Daniel
Anzeige
Anzeige
Anzeige
Live-Forum - Die aktuellen Beiträge
Datum
Titel
14.05.2026 13:31:09
14.05.2026 09:50:42
13.05.2026 19:14:18