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

Forumthread: Seitenumbruch per VBA

Seitenumbruch per VBA
tursiops
Hallo Experten!
Ich brauche mal wieder ein wenig Hilfe.
Ich möchte eine Liste nach Touren sortiert durcken.
In dem entsprechenden Sheet sind alle Kunden nach der Tournummer, die in Spalte A steht sortiert.
Spalte A |Spalte B
1I Meier
1I Müller
1II Schulze
1II Schmidt
1III Wegner usw...
Nun möchte ich per Code hinter jeden letzten Eintrag pro Tour einen Seitenumbruch einfügen.
Spalte A |Spalte B
1I Meier
1I Müller
...Seitenumbruch
1II Schulze
1II Schmidt
...Seitenumbruch
1III Wegner usw...
...Seitenumbruch usw...
Leider weiß ich momentan nicht wie ich da am Besten ran gehe. Ich bin für jeden Tipp dankbar.
Gruß Frank
Anzeige
AW: Seitenumbruch per VBA
25.08.2009 12:58:38
tursiops
Hallo nochmals!
Wie ich eine Seitenumbruch einfüge ist klar..., aber wie kann ich den Code gestalten, damit bei jeder Änderung in Spalte A diese Codezeile ausgeführt wird?
Sub Seitenwechsel festlegen()
ActiveWindow.SelectSheets.HBreaks.Add _
Before:=ActiveCell
End Sub
Gruß Frank
Anzeige
AW: Seitenumbruch per VBA
25.08.2009 13:02:34
MichaV
Hei,
gehe jede Zelle durch und vergleiche ob der Wert der Zelle ist als der Wert der Zelle darüber
mal als Ansatz dahingeschrieben:
dim zelle as range
for each zelle in range("A1:A500")
if zellezelle.offset(1,0) then HBreaks.Add Before:=zelle
next
Gruß- Micha
AW: Seitenumbruch per VBA
25.08.2009 13:21:18
tursiops
Vielen Dank für die Antwort - eine gute Idee!
Bisher erhalte ich allerdings die Fehlermeldung Laufzeitfehler 424 "Objekt erforderlich"
Sub Makro8()
Sheets("KN").Select
Dim zelle As Range
For Each zelle In Range("A1:A93")
If zelle  zelle.Offset(1, 0) Then HBreaks.Add Before:=zelle
Next
End Sub
Gruß tursiops
Anzeige
AW: Seitenumbruch per VBA
25.08.2009 13:10:32
Jens
Hallo Frank
Versuch mal so:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim LoLetzte As Long
Dim LoI As Long
With ActiveSheet
.ResetAllPageBreaks
LoLetzte = .Range("A65536").End(xlUp).Row
For LoI = 1 To LoLetzte
If Cells(LoI, 1)  Cells(LoI + 1, 1) Then
.HPageBreaks.Add Before:=Cells(LoI + 1, 1)
End If
Next
End With
End Sub
Gruß aus dem Sauerland
Jens
Anzeige
AW: Seitenumbruch per VBA
25.08.2009 13:34:49
tursiops
Hallo Jens!
Das sieht mir ganz nach einem Code für "Diese Arbeitsmappe" aus oder?
Der Code sollte jedoch nur für das Sheet "KN"
Ich habs mit:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim LoLetzte As Long
Dim LoI As Long
With Sheet ("KN")
.ResetAllPageBreaks
LoLetzte = .Range("A65536").End(xlUp).Row
For LoI = 1 To LoLetzte
If Cells(LoI, 1)  Cells(LoI + 1, 1) Then
.HPageBreaks.Add Before:=Cells(LoI + 1, 1)
End If
Next
End With
End Sub
...versucht, allerdings läuft der Code bei mir nicht. Beim Wechsel der Sheets passiert nichts, nicht im Modul, nicht in dieser Arbeitsmappe (mit Option explicit). Ausführbar per Editor ist der Code eh nicht... Hast Du eine Idee woran es liegen könnte?
Gruß Frank
Anzeige
AW: Seitenumbruch per VBA
25.08.2009 13:48:45
Jens
Hallo
Private Sub Worksheet_Change(ByVal Target As Range)
Der Code kommt in die Tabelle, wo es geschehen soll ("KN").
Gruß aus dem Sauerland
Jens
AW: Seitenumbruch per VBA
25.08.2009 14:07:58
tursiops
Hallo!
Ich habe den Code in den verschiedensten Versionen und Abänbderungen getestet, bekomme ihn aber nicht zum laufen. Hier die abgespeckte Beispieldatei:

Die Datei https://www.herber.de/bbs/user/64038.xls wurde aus Datenschutzgründen gelöscht


Gruß Frank
Anzeige
AW: Seitenumbruch per VBA
25.08.2009 14:21:29
tursiops
Hallo!
Na gut ich werde noch etwas probieren. Ich werde heute abend mal unter Office 2003 schauen, ob es an der Excel Version liegt, denn hier läuft der Code nicht. Alle anderen Makros und Codes in der Mappe laufen wiederum problemlos...
Jedenfalls schon einmal vielen Dank für die Unterstützung.
Gruß Frank
Anzeige
AW: Seitenumbruch per VBA
26.08.2009 11:42:55
fcs
Hallo Frank,
nur zu deinem Verständnis: Das Worksheet-Change-Ereignis reagiert auf Änderungen von Zellinhalten im Tabellenblatt.
Wenn du also die Nummern in Spalte A neu festlegst, dann werden ggf. zunächst an unerwünschten Zeilen Seitenwechsel eingefügt. Erst nach dem erneuten Sortieren der Zeilen kriegst du dann ggf. die Seitenwechsel an die richtige Position.
Da das ständige Einfügen der Seitenwechsel bei der Dateneingabe einen ja auch ganz kirre macht, solltest du die Seitenwechsel unmittelbar vor dem Drucken neu setzen lassen. Auch dafür gibt es ein spezielles Makro. Das auch mit der Seitenvorschau gestartet wird.
Alternativ kannst du auch das Workbook-Sheet-Deactivate-Ereignis nutzen, um beim Verlassen des Tabellenblatts die Seitenwechsel neu setzen. Welche Variante du verwenden solltest hängt auch von der restlichen Makro-Welt in deiner Arbeitsmappe ab.
Drucks du immer direkt das aktuell angezeigte Blatt, dann ist die Before-Print-Prozedur die Methode der Wahl.
Drucks du das Blatt "KN" von einem anderen Blatt aus (z.B. per Button-Klick) dann muss du die SheetDeactivate-Methode verwenden.
Es ist aber kein Problem beide Methoden parallel einzusetzen. Excel berechnet dann die Seitenümbrüche halt öfter neu.
Noch ein Hinweis: Mit Schriftart Arial in Spalte A kann man Tippfehler (kleines L (l) statt großem I) in der Anzeige nicht unterscheiden und wundert sich warum Seitenwechsel an unerwarteter Position angezeigt werden. Verwende in Spalte A eine andere Schriftart, z.B. Times New Roman, dann ist das Schriftbild eindeutiger.
Gruß
Franz

Private Sub Workbook_BeforePrint(Cancel As Boolean)
'Prozedur wird vor dem Drucken ausgeführt
Dim LoLetzte As Long
Dim LoI As Long
Select Case ActiveSheet.Name
Case "KN", "TabelleXYZ"
'Name(n) der Blätter in denen die Seitenumbrüche bei Wert-Wechsel in Spalte A _
gesetzt werden sollen
With ActiveSheet
.ResetAllPageBreaks
LoLetzte = .Range("A65536").End(xlUp).Row
For LoI = 3 To LoLetzte
If .Cells(LoI, 1)  .Cells(LoI + 1, 1) Then
.HPageBreaks.Add Before:=.Cells(LoI + 1, 1)
End If
Next
End With
Case Else
'do nothing
End Select
Fehler:
With Err
If .Number  0 Then
Select Case .Number
Case 9999
Case Else
MsgBox "Fehler-Nr.: " & .Number & vbLf & .Description
End Select
Cancel = True 'Druck abbrechen
End If
End With
End Sub
Private Sub Workbook_SheetDeactivate(ByVal Sh As Object)
'Prozedur wird beim Deaktivieren/Verlassen eines Blattes ausgeführt
Dim LoLetzte As Long
Dim LoI As Long
Select Case Sh.Name
Case "KN", "TabelleXYZ"
'Name(n) der Blätter in denen die Seitenumbrüche bei Wert-Wechsel in Spalte A _
gesetzt werden sollen
With Sh
.ResetAllPageBreaks
LoLetzte = .Range("A65536").End(xlUp).Row
For LoI = 3 To LoLetzte
If .Cells(LoI, 1)  .Cells(LoI + 1, 1) Then
.HPageBreaks.Add Before:=.Cells(LoI + 1, 1)
End If
Next
End With
Case Else
'do nothing
End Select
Fehler:
With Err
If .Number  0 Then
Select Case .Number
Case 9999
Case Else
MsgBox "Fehler-Nr.: " & .Number & vbLf & .Description
End Select
End If
End With
End Sub

Anzeige
AW: Seitenumbruch per VBA
25.08.2009 16:47:49
D.Saster
Hallo,
das funktioniert übrigens nur dann vernünftig, wenn du vorher auf die Seitenumbruchvorschu umschaltest.
Sub PageBreaks()
Dim lngRow As Long
Application.ScreenUpdating = False
ActiveWindow.View = xlPageBreakPreview
ActiveSheet.ResetAllPageBreaks
For lngRow = 3 To Cells(Rows.Count, 1).End(xlUp).Row
If Cells(lngRow, 1)  Cells(lngRow - 1, 1) Then
ActiveSheet.HPageBreaks.Add Cells(lngRow, 1)
End If
Next
ActiveWindow.View = xlNormalView
Application.ScreenUpdating = True
End Sub

Gruß
Dierk
Anzeige
AW: Seitenumbruch per VBA
26.08.2009 08:00:17
tursiops
Vielen Dank!
Nun funktioniert der Code auch bei mir!!! :-)
Danke Danke Danke!
Gruß Frank
;
Anzeige
Anzeige

Infobox / Tutorial

Seitenumbruch per VBA in Excel einfügen


Schritt-für-Schritt-Anleitung

Um Seitenumbrüche in Excel mithilfe von VBA einzufügen, kannst du folgende Schritte befolgen:

  1. Öffne Excel und lade die Arbeitsmappe, in der du Seitenumbrüche einfügen möchtest.
  2. Drücke ALT + F11, um den Visual Basic for Applications (VBA) Editor zu öffnen.
  3. Füge ein neues Modul hinzu:
    • Rechtsklick auf VBAProject (DeinDateiname).
    • Wähle Einfügen > Modul.
  4. Kopiere den folgenden Code in das Modul:
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim LoLetzte As Long
    Dim LoI As Long
    With Me
        .ResetAllPageBreaks
        LoLetzte = .Range("A65536").End(xlUp).Row
        For LoI = 1 To LoLetzte
            If .Cells(LoI, 1) <> .Cells(LoI + 1, 1) Then
                .HPageBreaks.Add Before:=.Cells(LoI + 1, 1)
            End If
        Next
    End With
End Sub
  1. Schließe den VBA-Editor und kehre zu deiner Excel-Arbeitsmappe zurück.
  2. Teste den Code, indem du eine Änderung in Spalte A vornimmst. Der Seitenumbruch wird automatisch hinter dem letzten Eintrag jeder Gruppe eingefügt.

Häufige Fehler und Lösungen

  • Laufzeitfehler 424: "Objekt erforderlich":

    • Stelle sicher, dass der Code in das richtige Arbeitsblatt-Modul eingefügt wurde, nicht in ein allgemeines Modul.
  • Seitenumbrüche erscheinen nicht:

    • Überprüfe, ob der Code tatsächlich ausgeführt wird, indem du die Worksheet_Change-Prozedur testest. Du kannst dies tun, indem du eine Zelle in Spalte A änderst.
  • Seitenumbruch wird an falscher Stelle gesetzt:

    • Achte darauf, dass die Werte in Spalte A korrekt sortiert sind. Tippfehler oder unterschiedliche Schriftarten können dazu führen, dass Excel die Werte nicht richtig vergleicht.

Alternative Methoden

  1. Manuelles Einfügen von Seitenumbrüchen:

    • Wähle die Zeile aus, hinter der du den Seitenumbruch einfügen möchtest.
    • Gehe zu Seitenlayout > Seitenumbruch einfügen.
  2. Verwendung des Workbook_BeforePrint-Ereignisses:

    • Setze die Seitenumbrüche nur vor dem Drucken, um unerwünschte Seitenumbrüche während der Dateneingabe zu vermeiden.
Private Sub Workbook_BeforePrint(Cancel As Boolean)
    ' Hier kommt dein Code zum Setzen der Seitenumbrüche
End Sub

Praktische Beispiele

Ein effektives Beispiel für das Einfügen von Seitenumbrüchen könnte so aussehen:

Sub PageBreaks()
    Dim lngRow As Long
    Application.ScreenUpdating = False
    ActiveWindow.View = xlPageBreakPreview
    ActiveSheet.ResetAllPageBreaks
    For lngRow = 3 To Cells(Rows.Count, 1).End(xlUp).Row
        If Cells(lngRow, 1) <> Cells(lngRow - 1, 1) Then
            ActiveSheet.HPageBreaks.Add Cells(lngRow, 1)
        End If
    Next
    ActiveWindow.View = xlNormalView
    Application.ScreenUpdating = True
End Sub

Hierbei wird der Seitenumbruch nur gesetzt, wenn sich der Wert in Spalte A ändert.


Tipps für Profis

  • Verwende Application.ScreenUpdating = False, um die Leistung zu verbessern, besonders bei großen Datenmengen.
  • Teste deinen Code regelmäßig, um sicherzustellen, dass er wie gewünscht funktioniert.
  • Nutze die Seitenumbruchvorschau, um zu überprüfen, wo die Seitenumbrüche gesetzt werden.

FAQ: Häufige Fragen

1. Wie kann ich Seitenumbrüche in einer bestimmten Excel-Version setzen?
Vergewissere dich, dass du die VBA-Methoden entsprechend der Version, die du verwendest (z.B. Excel 2016 oder 2019), anwendest. Einige Methoden könnten in älteren Versionen wie Excel 2003 nicht verfügbar sein.

2. Was passiert, wenn ich die Werte in Spalte A ändere?
Die Worksheet_Change-Prozedur wird automatisch ausgeführt, wenn du Werte in Spalte A änderst, und setzt die Seitenumbrüche basierend auf den neuen Werten.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige