Angepaßte Zeilenhöhe in Excel

Ich suche nach einer Möglichkeit, in Excel markierte Zeilen mit Hilfe eines Makros auf eine A4-Seite zu verteilen. Trotz exakter Berechnung bleiben nach dem Ablauf meines Makros immer noch einige Zeilen übrig, oder es rutschen mehr Zeilen auf die Seite als gewünscht. Wie läßt sich dieses Problem lösen?

Ihr Problem ist – so einfach es auch klingen mag – recht vielschichtig. Zunächst ist der bedruckbare Bereich der Seite zu bestimmen. Darauf haben sowohl die Ausrichtung der Seite als auch die Breite der Seitenränder Einfluß. Anschließend müssen Sie bei der Berechnung der Zeilenhöhe beachten, daß Excel Zeilenhöhen nur als Punktangaben annimmt und auch dann nur in einem Raster von 0,25 Punkten. Ob das an der Skalierung der Truetype-Schriftarten liegt oder andere Gründe hat, konnte WIN bisher nicht herausfinden.
Die Informationen über Ausrichtung und Randbreite lassen sich, wie Sie schon richtig gefolgert haben, aus dem Objekt PageSetup des jeweiligen Tabellenblatts ableiten. Da sich die Zeilenhöhe nur in Punkten angeben läßt, ist die Höhe der Seite in Abhängigkeit der Ausrichtung zu bestimmen und in einen Punktwert umzurechnen. Das erledigt die Funktion CentimetersToPoint des Application-Objekts.
Anschließend ist die Anzahl der ausgewählten Zeilen zu bestimmen, durch die der verfügbare Platz dann zu teilen ist. Dazu eignet sich die Methode Count, angewendet auf die Rows-Eigenschaft eines Range-Objekts, das in diesem Fall die aktuelle Auswahl repräsentiert. Die so ermittelte Zeilenhöhe ist schließlich nur noch dem Se- lection-Objekt zuzuweisen. Ein entsprechendes Makro sieht so aus:

Sub Spread ()¶
'Notwendige Informationen ermitteln¶
Set PgSetUp = ActiveSheet.PageSetup¶
RowCnt = Selection.Rows.Count¶
If RowCnt < 3 Then GoTo ErrSmall¶
BorderSize = PgSetUp.Top Margin + PgSetUp.BottomMargin¶
If PgSetUp.Orientation = xlPortrait Then¶
PageSize =_ 29.7 Else PageSize = 21¶
'Neue Zeilenhöhe ermitteln und zuweisen¶
RowHei =¶
(Application.CentimetersToPoints (PageSize)¶
- BorderSize) / RowCnt¶
Selection.RowHeight =
RowHei¶
Exit Sub¶
'Fehlerbehandlung¶
ErrSmall:¶
MsgBox ("Zeilenhöhe wird
zu groß!")¶
End Sub¶WIN-CODE: ZEILE
Zunächst deklarieren Sie das Page- Setup-Objekt. Dann bestimmen Sie die Anzahl ausgewählter Zeilen. Falls diese kleiner als drei ist, führt das aufgrund der maximalen Zeilenhöhe von 220 Punkt zwingend zu einer unzureichenden Formatierung. Deshalb verzweigt das Makro an dieser Stelle zu einer entsprechenden Meldung.
Jetzt bestimmen Sie die Breite des zu subtrahierenden Randes als Summe des oberen und unteren Randes. Je nach Ausrichtung des aktiven Tabellenblatts steht eine maximale Höhe von 29,7 oder 21 Zentimeter zur Verfügung.
Wenn alle Größen ermittelt sind, beginnt die Berechnung: Vom verfügbaren Platz auf der Seite in Punkt ist der Rand abzuziehen, dann der verbleibende Rest auf die Zeilen zu verteilen. Die so ermittelte Zeilenhöhe ist den Zeilen der Auswahl zuzuweisen.
Allerdings führt diese Lösung noch nicht in allen Fällen zum gewünschten Ergebnis. Die Ursache für die mög- lichen Abweichungen liegt aber nicht in der Differenz der berechneten Zeilenhöhe zu der tatsächlich von Excel verwendeten Höhe (Raster-Problem). Sie liegt in einer nicht näher bestimmbaren Breite von 13 Punkten, die Excel aus irgendeinem Grund noch benötigt.
Besonders erstaunlich ist die Tatsache, daß diese Größe sowohl für die horizontale als auch für die vertikale Ausrichtung konstant ist. Sie lösen das Problem, indem Sie die sechste Zeile wie folgt ändern:
BorderSize = PgSetUp.TopMargin + PgSetUp.BottomMar-gin + 13¶
Mit Hilfe dieser Anpassung können Sie nun Ihre Zeilen wie gewünscht auf eine Seite verteilen.