![]() |
||
![]() |
Angepa▀te Zeilenh÷he in ExcelIch 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: ZEILEZunΣ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. |
![]() |