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

Forumthread: Dynamischer Seitenumbruch

Dynamischer Seitenumbruch
25.08.2014 14:47:06
Niko
Hallo Zusammen,
ich habe eine ziemlich lange Pivottabelle für die Reports in unserem Unternehmen. Ich habe ein Makro erstellt, mit dem der Druckbereich dynamisch erstellt wird und anschließend das Sheet als PDF gespeichert sowie gedruckt wird. Nun habe ich allerdings das Problem, dass die Seitenumbrüche willkürlich gesetzt werden. Gibt es eine Möglichkeit eines dynamischen Seitenumbruchs?
Als Beispiel: Wenn die Seite voll ist, soll das Makro schauen, ob in Spalte B in der jeweiligen Zelle, wo es sonst den Seitenumbruch hinzufügt, etwas steht. Wenn ja, soll darüber der Seitenumbruch erfolgen. Wenn nein, soll der Seitenumbruch soweit noch oben verschoben werden, bis in der Zelle etwas steht.
Ich hoffe, ich konnte mein Problem halbwegs schildern. Hab dazu auch mal eine Beispieldatei erstellt: https://www.herber.de/bbs/user/92281.xlsx
Und hier mein Makro fürs Speichern, welches ich zurzeit verwende:
Sub DruckenFBS()
'Zellenberechnungen aktualisieren
ActiveSheet.Calculate
'Druckbereich definieren
Dim AnzahlEinträgeZeilen As Integer
Dim AnzahlEinträgeSpalten As Integer
'Spalten-/Zeileneinträge werden gezählt
Zeilen = WorksheetFunction.CountA(Sheets("Report FBS").Range("I1:I20000"))
Spalten = WorksheetFunction.CountA(Sheets("Report FBS").Range("A4:L4"))
With ActiveSheet.PageSetup
'Festlegung auf Hochformat
.Orientation = xlLandscape
'Druckbereich definieren
.PrintArea = Range(Cells(1, 1), Cells(Zeilen + 12, Spalten)).Address
'Seitenbreite definieren
.FitToPagesWide = 1
'Seitenhöhe definieren
.FitToPagesTall = False
'Seitenzahl bestimmen
.CenterFooter = "&8Seite &P von &N"
End With
'Als PDF an Wunschort speichern
UserForm2.Show
UserForm2.Hide
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=Sheets("GrundlageReportFBS").Cells( _
19, 3) & "\" & Sheets("Report FBS").Cells(1, 1) & ".pdf", _
Quality:=xlQualityStandard, IncludeDocProperties _
:=True, IgnorePrintAreas:=False, OpenAfterPublish:=False
'Druckmöglichkeit
Dim x As Byte
x = Application.InputBox("Wie oft soll gedruckt werden ?", "Drucken", 0, Type:=1)
If x  False Then
Sheets("Report FBS").PrintOut Copies:=x
End If
'Druckbereich wieder aufheben
Dim Tabelle As Worksheet
For Each Tabelle In ActiveWorkbook.Worksheets
Tabelle.PageSetup.PrintArea = ""
Next Tabelle
'Kommentare löschen
Sheets("Report FBS").Range("N5:N11").ClearContents
Sheets("Report FBS").Range("N21:N10000").ClearContents
'Meldung über das Ende
MsgBox ("Erfolgreich ausgeführt!")
End Sub

Anzeige

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

Betreff
Datum
Anwender
Anzeige
AW: Dynamischer Seitenumbruch
25.08.2014 15:02:55
Daniel
Hi
zum Verschieben der Zeilenumbrüche nach oben kannst du folgenden Code verwenden:
Sub test()
Dim i As Long
i = 1
With ActiveSheet
.ResetAllPageBreaks
Do While i 

Gruß Daniel

AW: Dynamischer Seitenumbruch
25.08.2014 15:10:59
Niko
Hi Daniel,
bei deinem Code bekomme ich den Laufzeitfehler (9): Index außerhalb des gültigen Bereichs.
Vielleicht noch als Information wegen dem Befehl .ResetAllPageBreaks: in meiner richtigen Datei habe ich in Zeile 18 einen manuellen Seitenumbruch hinzugefügt, welches auch weiterhin bestehen soll.
Vielen Dank im Voraus und viele Grüße
Niko

Anzeige
AW: Dynamischer Seitenumbruch
25.08.2014 15:16:45
Daniel
Hi
kann ich jetzt nicht nachvollziehen.
In welcher Programmzeile tritt der Fehler denn auf?
in deiner Beispieldatei war kein Manueller Wechsel drin, warum sollte ich das berücksichtigen?
die Programmzeile mit dem ResetAllPagebreaks kannst du ja rausnehmen, wenn sie stört.
Dann bleiben halt die alten Zeilenumbrüche drin, wenn der Code ein zweites mal laufen muss.
Gruß Daniel

Anzeige
AW: Dynamischer Seitenumbruch
25.08.2014 15:13:27
Rudi
Hallo,
Sub aaa()
Dim i As Integer, rng As Range
ActiveWindow.View = xlPageBreakPreview
With ActiveSheet
.ResetAllPageBreaks
For i = 1 To .HPageBreaks.Count
Set rng = .HPageBreaks(i).Location
Do While rng.Offset(, 1) = ""
Set rng = rng.Offset(-1)
Loop
Set .HPageBreaks(i).Location = rng
Next
End With
ActiveWindow.View = xlNormalView
End Sub

Gruß
Rudi
Anzeige
;
Anzeige
Anzeige

Infobox / Tutorial

Dynamischer Seitenumbruch in Excel


Schritt-für-Schritt-Anleitung

Um einen dynamischen Seitenumbruch in Excel zu implementieren, kannst du die folgenden Schritte befolgen. Diese Anleitung geht davon aus, dass du bereits mit VBA und dem Erstellen von Makros vertraut bist:

  1. Öffne den Visual Basic-Editor: Drücke ALT + F11 in Excel.

  2. Füge ein neues Modul hinzu: Klicke mit der rechten Maustaste auf „VBAProject (dein Arbeitsblatt)“ und wähle „Einfügen“ > „Modul“.

  3. Kopiere und füge den folgenden Code ein:

    Sub DynamischerSeitenumbruch()
       Dim i As Long
       Dim rng As Range
       ActiveWindow.View = xlPageBreakPreview
       With ActiveSheet
           .ResetAllPageBreaks
           For i = 1 To .HPageBreaks.Count
               Set rng = .HPageBreaks(i).Location
               Do While rng.Offset(, 1) = ""
                   Set rng = rng.Offset(-1)
               Loop
               Set .HPageBreaks(i).Location = rng
           Next
       End With
       ActiveWindow.View = xlNormalView
    End Sub
  4. Schließe den Editor: Speichere dein Makro und kehre zu Excel zurück.

  5. Führe das Makro aus: Drücke ALT + F8, wähle „DynamischerSeitenumbruch“ und klicke auf „Ausführen“.

Dieser Code sorgt dafür, dass die Seitenumbrüche in deiner Tabelle dynamisch gesetzt werden, basierend auf den Inhalten in den Zellen.


Häufige Fehler und Lösungen

  • Laufzeitfehler (9): Index außerhalb des gültigen Bereichs

    • Dieser Fehler tritt auf, wenn der Code versucht, auf einen Bereich zuzugreifen, der nicht existiert. Stelle sicher, dass du die richtige Arbeitsmappe und das richtige Blatt ausgewählt hast.
  • Manuelle Seitenumbrüche bleiben bestehen

    • Wenn du in deiner Datei manuelle Seitenumbrüche hinzugefügt hast, musst du den Befehl .ResetAllPageBreaks möglicherweise entfernen, um diese zu erhalten.

Alternative Methoden

Eine alternative Methode zur Verwaltung von Seitenumbrüchen besteht darin, den Druckbereich in Excel festzulegen. Hier ist ein einfacher VBA-Code, um den Druckbereich dynamisch zu setzen:

Sub DruckbereichFestlegen()
    Dim letzteZeile As Long
    letzteZeile = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row
    ActiveSheet.PageSetup.PrintArea = "$A$1:$L$" & letzteZeile
End Sub

Dieser Code definiert den Druckbereich basierend auf der letzten verwendeten Zeile in Spalte A.


Praktische Beispiele

  1. Beispiel für einen dynamischen Seitenumbruch:

    • Verwende die oben genannten Codes, um eine lange Pivottabelle zu verwalten, indem du sicherstellst, dass der Seitenumbruch nur gesetzt wird, wenn in der darüber liegenden Zelle Daten vorhanden sind.
  2. Druckbereich und Seitenumbruch kombinieren:

    • Du kannst beide Codes kombinieren, um zuerst den Druckbereich festzulegen und danach die Seitenumbrüche dynamisch zu setzen.

Tipps für Profis

  • Nutze die excel seitenumbruch automatisch einfügen-Funktionalität, um sicherzustellen, dass deine Berichte immer gut strukturiert sind.
  • Verwende die seitenumbruch excel tastenkombination, um schnell zwischen verschiedenen Ansichten zu wechseln und die Layout-Optionen zu überprüfen.
  • Teste deine Makros mit verschiedenen Datenmengen, um sicherzustellen, dass sie unter allen Umständen funktionieren.

FAQ: Häufige Fragen

1. Wie kann ich einen manuellen Seitenumbruch in Excel hinzufügen? Um einen manuellen Seitenumbruch hinzuzufügen, gehe zu „Seitenlayout“ > „Umbrüche“ > „Seitenumbruch einfügen“.

2. Kann ich Seitenumbrüche in Access-Berichten dynamisch setzen? Ja, in Access kannst du die Funktion „Seitenumbruch“ im Bericht-Design verwenden, um dynamische Seitenumbrüche zu erstellen, ähnlich wie in Excel.

3. Was muss ich tun, wenn mein Makro nicht funktioniert? Überprüfe, ob alle Referenzen korrekt sind und ob das Makro auf die richtige Tabelle und den richtigen Bereich zugreift. Debugge den Code Schritt für Schritt, um den Fehler zu finden.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige