Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1296to1300
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 verhindern

Seitenumbruch verhindern
04.02.2013 00:28:54
Johannes
Hallo,
ich möchte verhindern, dass Excel die Seite in einem bestimmten Bereich (Zeile) umbricht. Ich habe zusammenhängende Daten (Werte in einer Spalte die gleich sind wenn die Daten zusammengehören) die immer nur gesamt auf eine neue Seite umgebrochen werden können. Gibt es in Excel auch eine Möglichkeit den Umbruch zu verhindern (wie in Word) oder geht das nur über eine Makro-Schleife? Hat vielleicht jemand schon eine elegante Lösung hierfür? Ich denke, die Anforderung gibt es sicher öfters. Kann mir jemand sagen, wie Excel die Zeile für den Umbruch ermittelt (Wiederholungszeilen, Zeilenhöhe, Papiergröße, Ränder), kann ich die Höhe irgendwie feststellen?
Danke für euer Hilfe!
Gruß Johannes

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Seitenumbruch verhindern
04.02.2013 02:07:34
fcs
Hallo Johannes,
Gibt es in Excel auch eine Möglichkeit den Umbruch zu verhindern (wie in Word) oder geht das nur über eine Makro-Schleife?
Es gibt in Excel kein entsprechendes Zellformat. Du hast nur die Möglichkeit manuel/per Makro feste Seitenwechsel an gewünschten Stellen zu setzen.
Hat vielleicht jemand schon eine elegante Lösung hierfür?Das eine oder andere findet sich auch hier im Archiv. Standardlösungen gibt es keine, nur prinzipielle Lösungswege, hier muss immer individuell eine Lösung für den jeweiligen Tabellenaufbau erstellen.
Ich denke, die Anforderung gibt es sicher öfters.
Anforderung kommt öfters vor, aber es gibt eben keine Standardlösung.
Kann mir jemand sagen, wie Excel die Zeile für den Umbruch ermittelt (
Wiederholungszeilen, Zeilenhöhe, Papiergröße, Ränder), kann ich die Höhe irgendwie feststellen?

Papiergröße und Ränder legst du ja unter der Seitenlayout-Seitenformatierung fest oder du überläßt es Excel, das sich dann nach den Möglichkeiten des Druckers richtet.
Die Höhe der Zeilen richtet sich nach der Formatierung für die Schriftgröße und ggf. zusätzlich der Formatierung für die Standardschrift. Dazu kommen dann noch Formatierungen wie automatischer Zeilenumbruch etc, die die Höhe der einzelnen Zeilen beeinflußt.
Man kann die Höhe der Zeilen natürlich auch fest vorgeben. In den neueren Excelversionen soger in mm.
Es ist aber fast unmöglich auf Basis der oben genannten Parameter die Höhen der Zeilen zu ermitteln, aufzusummieren und so die Position eines Seitenwechsels zu berechnen.
Meistens läuft es darauf hinaus, dass man die Zeilen der automatischen Seitenwechsel per Makro ermittelt und bei Bedarf an Hand von Zellinhalten prüft, ob ein manueller Seitenwechsel oberhalb des automatischen eingefügt werden muss, um einen unerwünschten Seitenwechsel zu unterdrücken.
Gruß
Franz

Anzeige
AW: Seitenumbruch verhindern
04.02.2013 11:49:50
Johannes
Hallo Franz,
so was in der Art habe ich mir fast gedacht. Hast du mir einen Tipp wie ich die automatischen Seitenwechsel ermitteln kann? Das würde mir schon weiterhelfen.
Danke
Gruß Johannes

AW: Seitenumbruch verhindern
04.02.2013 14:02:29
fcs
Hallo Johannes,
hier ein Beispielmakro.
Das Makro sucht nach den Seitenwechseln und prüft, ob der Seitenwechsel einen Zeilenblock, der in Spalte A mit "x" gekennzeichnet ist durchtrennt. Falls Ja, dann wird oberhalb des Zeilenblocks ein manueller Seitenumbruch eingefügt.
Bei langen Listen, braucht das Makro relativ viel Zeit, da ggf. umfangreiche Neuberechnungen durchgeführt werden müssen.
Gruß
Franz
Sub Seitenwechsel_2()
Dim objPageBreak As HPageBreak, intI As Integer, Zeile As Long
Dim ZeileMerker1 As Long, bolMerker As Boolean, lngView As Long
Dim rngZeile As Range
Dim wks As Worksheet
Const Suchbegriff As String = "x" 'Text zur Kennzeichnung eines Blocks _
der nicht durch Seitenwechsel getrennt werden soll
Const SpalteSuch As Long = 1 'Spalte mit Kennzeichnung , 1 = A
Set wks = ActiveSheet
intI = 1
bolMerker = False
ZeileMerker1 = 0
With wks
.ResetAllPageBreaks
lngView = ActiveWindow.View
If lngView  xlPageBreakPreview Then ActiveWindow.View = xlPageBreakPreview
Do Until intI > .HPageBreaks.Count
Set objPageBreak = wks.HPageBreaks(intI)
Do
Zeile = Zeile + 1
If bolMerker = False _
And LCase(.Cells(Zeile, SpalteSuch).Text) = LCase(Suchbegriff) Then
ZeileMerker1 = Zeile
bolMerker = True
ElseIf bolMerker = True _
And LCase(.Cells(Zeile, SpalteSuch).Text)  LCase(Suchbegriff) Then
bolMerker = False
End If
If Zeile = objPageBreak.Location.Row Then
'GoTo Weiter01
'Test-Anfang-Anzeige Seitenumbruch info
With objPageBreak
.Location.Range("A1").Select
MsgBox "Seitenumbruch Nr.: " & intI & vbLf _
& "Zelle: " & .Location.Address & vbLf _
& "Zeile: " & .Location.Row & vbLf _
& "Typ(-4105 = automatisch, -4135=Manuell): " & .Type
End With
'Test-Ende-Anzeige Seitenumbruch info
Weiter01:
'ggf. manuellen Seitenumbruch oberhalb einfügen, wenn Seitenwechsel durch Block geht
If bolMerker = True And ZeileMerker1 > 0 Then
Set rngZeile = .Rows(ZeileMerker1)
rngZeile.PageBreak = xlPageBreakManual
ZeileMerker1 = 0
End If
intI = intI + 1
.Calculate
Exit Do
End If
Loop
Loop
If lngView  ActiveWindow.View Then ActiveWindow.View = lngView
End With
Set wks = Nothing: Set rngZeile = Nothing: Set objPageBreak = Nothing
End Sub

Anzeige
funktioniert fast perfekt
04.02.2013 20:12:23
Johannes
Hallo Franz,
dein Makro hat mir sehr geholfen. Ich habe es noch so umgebaut, dass nicht nach einem Suchbegriff gesucht wird, sondern immer wenn sich in einer Spalte ein Wert ändert (gilt als Beginn für einen neuen Block) ggfl. der Seitenumbruch angepasst wird. Weiters war noch das Problem wenn ein Block länger als eine Seite war, dann ist das Makro in eine Endlosschleife gelaufen und stoppte erst am Tabellenende mit Fehler.
Nochmal danke für deine Hilfe!
Gruß Johannes

Sub Seitenwechsel_2() 'SpalteSuch As Integer)
Dim objPageBreak As HPageBreak, intI As Integer, Zeile As Long
Dim ZeileMerker1 As Long, bolMerker As Boolean, lngView As Long
Dim rngZeile As Range
Dim wks As Worksheet
'Const Suchbegriff As String = "x" 'Text zur Kennzeichnung eines Blocks der nicht durch  _
Seitenwechsel getrennt werden soll
Const SpalteSuch As Long = 14 'Spalte mit Kennzeichnung , 1 = A 'ggfl. oben ausschalten
Set wks = ActiveSheet
intI = 1
bolMerker = False
Zeile = 2 'in Zeile 1 kann nicht gestartet werden da immer mit der Vorgängerzeile verglichen  _
wird die es erst ab Zeile 2 gibt
ZeileMerker1 = 0
With wks
.ResetAllPageBreaks
lngView = ActiveWindow.View
If lngView  xlPageBreakPreview Then ActiveWindow.View = xlPageBreakPreview
Do Until intI > .HPageBreaks.Count
Set objPageBreak = wks.HPageBreaks(intI)
Do
Zeile = Zeile + 1
'           If bolMerker = False And LCase(.Cells(Zeile, SpalteSuch).Text) = LCase(Suchbegriff)  _
Then 'Originalzeile mit Suchbegriff
If bolMerker = False And .Cells(Zeile, SpalteSuch)  .Cells(Zeile - 1, SpalteSuch)  _
Then
ZeileMerker1 = Zeile
'                bolMerker = True 'Originalzeile mit Suchbegriff
'            ElseIf bolMerker = True And LCase(.Cells(Zeile, SpalteSuch).Text)  LCase( _
Suchbegriff) Then 'Originalzeile mit Suchbegriff
'                bolMerker = False 'Originalzeile mit Suchbegriff
End If
If Zeile >= objPageBreak.Location.Row Then
GoTo Weiter01 'ausschalten falls die Info zum Testen gewünscht wird
'Test-Anfang-Anzeige Seitenumbruch Info
With objPageBreak
.Location.Range("A1").Select
MsgBox "Seitenumbruch Nr.: " & intI & vbLf _
& "Zelle: " & .Location.Address & vbLf _
& "Zeile: " & .Location.Row & vbLf _
& "Typ(-4105 = automatisch, -4135=Manuell): " & .Type
End With
'Test-Ende-Anzeige Seitenumbruch Info
Weiter01:
'ggf. manuellen Seitenumbruch oberhalb einfügen, wenn Seitenwechsel durch Block  _
geht
'                If bolMerker = True And ZeileMerker1 > 0 Then 'Originalzeile mit Suchbegriff
If ZeileMerker1 > 0 Then
Set rngZeile = .Rows(ZeileMerker1)
rngZeile.PageBreak = xlPageBreakManual
ZeileMerker1 = 0
End If
intI = intI + 1
.Calculate
Exit Do
End If
Loop
Loop
If lngView  ActiveWindow.View Then ActiveWindow.View = lngView
End With
Set wks = Nothing: Set rngZeile = Nothing: Set objPageBreak = Nothing
End Sub

Anzeige
Frage ist beantwortet
08.02.2013 06:54:30
fcs
o.w.T

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige