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