Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1556to1560
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

Druckbereich: Umbrüche dürfen nicht zerteilen

Druckbereich: Umbrüche dürfen nicht zerteilen
12.05.2017 12:22:46
Raymond
Hallo,
ich habe folgendes Problem beim Thema Druckbereich und Seitenumbrüche:
Ich möchte ein Raumbuch erstellen. Ein Eintrag im Raumbuch besteht immer aus x-Zeilen. Die Zeilenhöhe dieser Zeilen kann aber Variable sein, sodass je nach Zeilenhöhe zwei, drei oder vier Raumbucheinträge auf eine Seite passen. Mir ist es nun ein Anliegen, dass diese Einträge durch Seitenumbrüche nicht geteilt werden.
Meine bisherige Lösung: Einfach nur 2 Einträge pro Seite. Umbrüche werden über Marko gesetzt mit einer einfachen Schleife.
Ziel: Seiten mit Einträgen möglichst gut zu füllen ohne die Einträge zu zerteilen.
Zur Veranschaulichung die Tabelle aus meiner Arbeitsmappe.
https://www.herber.de/bbs/user/113540.xlsx
Danke :)

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Druckbereich: Umbrüche dürfen nicht zerteilen
12.05.2017 14:36:57
UweD
Hallo
hab was gebastelt.
Als Kriterium, wann ein Pagebreak möglich wäre nehme ich die Verbundenen Zellen A-D
Wenn also in Spalte 1 verbundene Zellen gefunden werden, dann wäre ein Umbruck hier möglich.
kopiere das hier in ein normales Modul.
Sub Seitenumbruch()
    Dim LR As Double, LastKrit As Double, LastPB As Double, i As Double
    Application.ScreenUpdating = False
    With ActiveSheet
        .ResetAllPageBreaks
        LR = .Cells.SpecialCells(xlCellTypeLastCell).Row - 1
        i = 5
        Do Until i >= LR
            If .Cells(i, 1).MergeCells Then ' Verbundene Zelle = Kriterium für möglichen PB 
                LastKrit = i
            End If
            If .Rows(i).PageBreak = xlPageBreakAutomatic Then
                LastPB = i
            End If
            If LastKrit < LastPB Then
                .HPageBreaks.Add Before:=Rows(LastKrit)
                LastPB = LastKrit
                i = LastKrit
            End If
            i = i + 1
        Loop
    End With
End Sub

LG UweD
Anzeige
noch ein BUG
12.05.2017 15:03:10
UweD
Hallo nochmal
im Debugmodus hat alles geklappt..
Die Ermittlung für den nächsten automatischen Umbruch kommt scheinbar nicht so schnell mit.
Deshalb hab ich Screenupdating drin gelassen und noch einmal neu berechnet.
Sub Seitenumbruch()
    Dim LR As Double, LastKrit As Double, LastPB As Double, i As Double
    With ActiveSheet
        .ResetAllPageBreaks
        LR = .Cells.SpecialCells(xlCellTypeLastCell).Row - 1
        i = 5
        Do Until i >= LR
            If .Cells(i, 1).MergeCells Then ' Verbundene Zelle = Kriterium für möglichen PB 
                LastKrit = i
            End If
            If .Rows(i).PageBreak = xlPageBreakAutomatic Then
                LastPB = i
            End If
            If LastKrit < LastPB Then
                .HPageBreaks.Add Before:=Rows(LastKrit)
                Application.Calculate ' sonst wird der nächste automatische PB nicht ermittelt 
                LastPB = LastKrit
                i = LastKrit
            End If
            i = i + 1
        Loop
    End With
End Sub
LG UweD
Anzeige
AW: noch ein BUG
12.05.2017 15:42:20
RPP63
Moin Uwe!
Ich weiß nicht, ob es sich um einen Bug handelt.
Ungetestet:
Bei solchen Sachen schalte ich immer folgendes ab:
Application.PrintCommunication = False

{auch wenn es zunächst widersinnig erscheint}
Gruß Ralf
leider nein..
12.05.2017 16:02:23
UweD
Hallo
dann bleibt das Makro trotzdem hängen.
Habe jetzt einiges ausprobiert... Wenn ich das calculate NICHT ausführe, dann läuft es Endlos.
Das ist meine finale Lösung.
Sub Seitenumbruch()
    Dim LR As Double, LastKrit As Double, LastPB As Double, i As Double
    With ActiveSheet
        .ResetAllPageBreaks
        LR = .Cells.SpecialCells(xlCellTypeLastCell).Row - 1
        For i = 5 To LR
            If .Cells(i, 1).MergeCells Then ' Verbundene Zelle = Kriterium für möglichen PB 
                LastKrit = i
            End If
            If .Rows(i).PageBreak = xlPageBreakAutomatic Then
                LastPB = i
            End If
            If LastKrit < LastPB Then
                .HPageBreaks.Add Before:=Rows(LastKrit)
                Application.Calculate ' sonst wird der nächste automatische PB nicht ermittelt 
                LastPB = LastKrit
                i = LastKrit
            End If
        Next
        MsgBox "Fertig"
    End With
End Sub
LG UweD
Anzeige
AW: leider nein..
16.05.2017 15:24:10
Raymond
Vielen Dank!
Funktioniert Perfekt :)))))))))))
AW: leider nein..
16.05.2017 15:24:20
Raymond
Vielen Dank!
Funktioniert Perfekt :)))))))))))
Prima! Danke für die Rückmeldung.
16.05.2017 16:13:35
UweD

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige