von F3K Total » Mi, 19.02.2014 22:27
Hallo,
hier noch eine, wie ich finde, deutlich elegantere Methode als mein erster Vorschlag, vergleiche auch mit
diesem Beitrag von
Stephan, weil man kein Makro an ein Tabellenereignis binden muss.
Annahmen
- Zu druckende Spalten seinen Spalte A bis E
- längenbestimmend: Spalte B
Vorgehen
- Schreibe in eine Zelle deiner Wahl (hier verwendet F2) diese Formel zu Bestimmung der letzten gefüllten Zelle in Spalte B
Code: Alles auswählen
=MAX(WENN(NICHT(ISTLEER(B2:B1000));ZEILE(B2:B1000);0))
und schließe die Formel mit STRG+SHIFT+ENTER ab, um eine Matrixformel zu erzeugen, sie sollte dann so aussehen:Code: Alles auswählen
{=MAX(WENN(NICHT(ISTLEER(B2:B1000));ZEILE(B2:B1000);0))}
- Kopiere die Function PRINTAREA ins Dokument oder in "Meine Makros" in die Bibliothek Standard (zwingend)
Code: Alles auswählen
Function PRINTAREA(StartSpalte, StartZeile, EndSpalte, EndZeile)
Dim Druckbereich(0) as new com.sun.star.table.CellRangeAddress
Druckbereich(0).StartColumn = StartSpalte
Druckbereich(0).StartRow = StartZeile
Druckbereich(0).EndColumn = EndSpalte
Druckbereich(0).EndRow = EndZeile
if not isnull(ThisComponent.currentcontroller) then
With ThisComponent.currentcontroller.activeSheet
.setPrintareas(Druckbereich())
End With
end if
End Function
- Schreibe nun diese Formel in z.B. Zelle G2 F2 entspricht in dieser Formel, der Zelle, in der die Matrixformel steht.
- fertig
Mit der Matrixformel wird im Bereich bis Zeile 1000 die Zeilennummer der untersten gefüllte Zelle ermittelt.
Dann mit der Function der Druckbereich über die Spalten A bis E gesetzt
- 0;0 entspricht dabei den Koordinaten der Zelle A1, oberste linke Zelle
- 4;F2-1 entspricht den Koordinaten der unteren rechten Zelle des Druckbereiches in Spalte E
Viel Erfolg
Gruß R
Hallo,
hier noch eine, wie ich finde, deutlich elegantere Methode als mein erster Vorschlag, vergleiche auch mit [url=http://de.openoffice.info/viewtopic.php?f=2&t=50325#p186094]diesem Beitrag[/url] von [color=#BF4000][b]Stephan[/b][/color], weil man kein Makro an ein Tabellenereignis binden muss.
[b]Annahmen[/b]
[list][*]Zu druckende Spalten seinen Spalte A bis E
[*]längenbestimmend: Spalte B[/list]
[b]Vorgehen[/b]
[list][*]Schreibe in eine Zelle deiner Wahl (hier verwendet [color=#0040FF][b]F2[/b][/color]) diese Formel zu Bestimmung der letzten gefüllten Zelle in Spalte B[code]=MAX(WENN(NICHT(ISTLEER(B2:B1000));ZEILE(B2:B1000);0))[/code]und schließe die Formel mit [color=#0040FF][b]STRG+SHIFT+ENTER[/b][/color] ab, um eine Matrixformel zu erzeugen, sie sollte dann so aussehen:[code]{=MAX(WENN(NICHT(ISTLEER(B2:B1000));ZEILE(B2:B1000);0))}[/code]
[*]Kopiere die Function [color=#0040FF][b]PRINTAREA[/b][/color] ins Dokument oder in "Meine Makros" in die Bibliothek Standard (zwingend)
[code]Function PRINTAREA(StartSpalte, StartZeile, EndSpalte, EndZeile)
Dim Druckbereich(0) as new com.sun.star.table.CellRangeAddress
Druckbereich(0).StartColumn = StartSpalte
Druckbereich(0).StartRow = StartZeile
Druckbereich(0).EndColumn = EndSpalte
Druckbereich(0).EndRow = EndZeile
if not isnull(ThisComponent.currentcontroller) then
With ThisComponent.currentcontroller.activeSheet
.setPrintareas(Druckbereich())
End With
end if
End Function[/code]
[*]Schreibe nun diese Formel in z.B. Zelle [color=#0040FF][b]G2[/b][/color][code]=PRINTAREA(0;0;4;F2-1)[/code] [b][color=#0040FF]F2[/color][/b] entspricht in dieser Formel, der Zelle, in der die Matrixformel steht.
[*]fertig[/list]
Mit der Matrixformel wird im Bereich bis Zeile 1000 die Zeilennummer der untersten gefüllte Zelle ermittelt.
Dann mit der Function der Druckbereich über die Spalten A bis E gesetzt
[list][*][color=#0040FF][b]0;0[/b][/color] entspricht dabei den Koordinaten der Zelle A1, oberste linke Zelle
[*][color=#0040FF][b]4;F2-1[/b][/color] entspricht den Koordinaten der unteren rechten Zelle des Druckbereiches in Spalte E[/list]
Viel Erfolg
Gruß R