ich arbeite seit einiger Zeit an einem Problem, krieg es aber nicht vernünftig gelöst.
Und zwar hab ich ein Rechnungstool erstellt, bei dem man aus einer Tabelle mit Rechnungspositionen beliebige Zeilen auswählen kann. Das Tool transformiert die Auswahl dann in eine Rechnung mit korrekter Käuferanschrift, Rechnungskopf und Rechnungsfuß.
Mein Problem ist nun, dass ab einer gewissen Anzahl von ausgewählten Zeilen die Rechnung zu lang wird und nicht mehr auf eine Seite passt. Der Rechnungsfuß soll hierbei immer (ähnlich Word: Zeilen zusammenhalten) komplett auf einer Seite landen, und nicht im Seitenumbruch abgeschnitten werden. Das heißt ich brauche eine Funktion, die mir ausgibt, bei welcher Zeile der Seitenumbruch ist, und dann den Rechnungsfuß entsprechend verschiebt, oder eben auch nicht.
Da ich Darstellungsfehlern etc. aus dem Weg gehen will, habe ich auf eine Übertragung in ein Word-Dokument verzichtet.
Mein Ansatz war anfangs den Druckbereich mittels "ActiveSheet.PageSetup.PrintArea" abzufragen, allerdings liefert mir das nicht die gewünschte Lage der Seitenumbrüche, so musste ich einen anderen Weg wählen, der etwas tiefer in die Excel Materie geht.
Da mein ausgedruckter Bereich immer 4 Spalten umfasst, habe ich mir die Länge dieser 4 Spalten in Points ausgeben lassen (ActiveSheet.Range("A1:D1").Width), wie auch die Breite einer DIN A4 Seite minus den beiden Seitenrändern in Points umgewandelt. Hieraus hab ich wiederum einen Faktor errechnet, womit Excel die Tabelle skalieren muss, damit sie genau in den Druckbereich passt (Druckeinstellung: Alle Spalten auf eine Seite).
Aus diesem Faktor dacht ich könnte ich die Anzahl der Zeilen, die auf eine Seite passen, ermitteln, indem ich alle Höhen der Zeilen multipliziert mit dem Skalierungsfaktor addiere und schaue wie lange dieser Wert kleiner ist als die Höhe einer DIN A4 Seite minus der Seitenränder oben und unten.
Leider funktioniert das Ganze nicht so, wie ich mir das vorgestellt habe :/
Mein bisheriger Code:
Private Sub Worksheet_Activate()
Dim BreitePapierCm As Double
Dim BreitePapierP As Double
Dim HoehePapierCm As Double
Dim HoehePapierP As Double
Dim BreiteDruckbereichP As Double
Dim HoeheDruckbereichP As Double
Dim linkerRandP As Double
Dim rechterRandP As Double
Dim untererRandP As Double
Dim obererRandP As Double
Dim Faktor As Double
Dim x As Integer
Dim Hilfe As Double
BreitePapierCm = 21
HoehePapierCm = 29.7
BreitePapierP = Application.CentimetersToPoints(BreitePapierCm)
HoehePapierP = Application.CentimetersToPoints(HoehePapierCm)
With ActiveSheet.PageSetup
linkerRandP = .LeftMargin
rechterRandP = .RightMargin
untererRandP = .BottomMargin
obererRandP = .TopMargin
End With
BreiteDruckbereichP = BreitePapierP - linkerRandP - rechterRandP
HoeheDruckbereichP = HoehePapierP - obererRandP - untererRandP
Faktor = ActiveSheet.Range("A1:G1").Width / BreiteDruckbereichP
Do While Hilfe
Danke für eure Hilfe :)