Seite 1 von 1
Rahmen um Zelle :?:
Verfasst: Mi, 07.09.2005 11:20
von mike6
Hallo,
ich möchte eine zuvor markierte Zelle ( oder Zellbereich ) mit
einem roten Rahmen versehen.
Leider bekomme ich das nur über einen zuvor deffinierten Bereich hin:
oZellBereich = ThisComponent.Sheets(0).getCellRangeByname( "B2:D4" )
Wie schreibe ich das Makro um, dass nur der zuvor markierte Bereich
gemeint ist.
mfg
mike6
Verfasst: Mi, 07.09.2005 12:10
von Stephan
Code: Alles auswählen
Sub rahmen_setzen()
bereich = ThisComponent.getCurrentSelection()
if bereich.supportsService("com.sun.star.sheet.SheetCell" ) _
OR bereich.supportsService("com.sun.star.sheet.SheetCellRange" ) _
OR bereich.supportsService("com.sun.star.sheet.SheetCellRanges") Then
rahmenlinie = CreateUnoStruct("com.sun.star.table.BorderLine")
With rahmenlinie
.Color = RGB( 255, 0, 0 )
.OuterLineWidth = 100
End With
rahmen = createUnoStruct("com.sun.star.table.TableBorder")
With rahmen
.TopLine = rahmenlinie
.IsTopLineValid = True
.BottomLine = rahmenlinie
.IsBottomLineValid = True
.LeftLine = rahmenlinie
.IsLeftLineValid = True
.RightLine = rahmenlinie
.IsRightLineValid = True
End With
bereich.TableBorder = rahmen
End If
End Sub
Gruß
Stephan
Verfasst: Mi, 07.09.2005 13:02
von mike6

-

-
Danke. Funktioniert bestens.
mfg
mike6
Verfasst: So, 27.08.2006 09:12
von turtle47
Hallo Stephan,
ich möchte mehrere Zellbereiche mit Rahmen versehen und habe Dein
Makro wie folgt umgeschrieben:
Code: Alles auswählen
Sub rahmen_setzen()
oZellBereich = ThisComponent.Sheets(0).getCellRangeByname( "D4:D8" ) 'Erster Zellbereich
oZellbereich.supportsService("com.sun.star.sheet.SheetCell")
rahmenlinie = CreateUnoStruct("com.sun.star.table.BorderLine")
With rahmenlinie
.Color = RGB( 255, 0, 0 )
.OuterLineWidth = 100
End With
rahmen = createUnoStruct("com.sun.star.table.TableBorder")
With rahmen
.TopLine = rahmenlinie
.IsTopLineValid = True
.BottomLine = rahmenlinie
.IsBottomLineValid = True
.LeftLine = rahmenlinie
.IsLeftLineValid = True
.RightLine = rahmenlinie
.IsRightLineValid = True
End With
oZellbereich.TableBorder = rahmen
oZellBereich = ThisComponent.Sheets(0).getCellRangeByname( "J5:J16" ) 'Zweiter Zellbereich
oZellbereich.supportsService("com.sun.star.sheet.SheetCell")
rahmenlinie = CreateUnoStruct("com.sun.star.table.BorderLine")
With rahmenlinie
.Color = RGB( 255, 0, 0 )
.OuterLineWidth = 100
End With
rahmen = createUnoStruct("com.sun.star.table.TableBorder")
With rahmen
.TopLine = rahmenlinie
.IsTopLineValid = True
.BottomLine = rahmenlinie
.IsBottomLineValid = True
.LeftLine = rahmenlinie
.IsLeftLineValid = True
.RightLine = rahmenlinie
.IsRightLineValid = True
End With
oZellbereich.TableBorder = rahmen
End Sub
Geht das vieleicht ein wenig kürzer?
Das ganze erscheint mir etwas klobig.
Im voraus vielen Dank.
Jürgen
Verfasst: So, 27.08.2006 09:37
von Toxitom
Hei Jürgen,
Geht das vieleicht ein wenig kürzer?
Das ganze erscheint mir etwas klobig.
Das ist schon OK. Da die Blöcke redundant sind, kanst du natürlich mit einer Schleife arbeiten, und Rahmen und Linie außerhalb einmal definieren:
Code: Alles auswählen
Sub rahmen_setzen()
dim aBereiche()
aBereiche = array("D4:D8", "J5:J16") 'alle Bereiche
REM Linie und Rahmen definieren
rahmenlinie = CreateUnoStruct("com.sun.star.table.BorderLine")
With rahmenlinie
.Color = RGB( 255, 0, 0 )
.OuterLineWidth = 100
End With
rahmen = createUnoStruct("com.sun.star.table.TableBorder")
With rahmen
.TopLine = rahmenlinie
.IsTopLineValid = True
.BottomLine = rahmenlinie
.IsBottomLineValid = True
.LeftLine = rahmenlinie
.IsLeftLineValid = True
.RightLine = rahmenlinie
.IsRightLineValid = True
End With
for i = 0 to uBound(aBereiche()) 'Schleife über alle Bereiche
oZellBereich = ThisComponent.Sheets( 0).getCellRangeByname( aBereiche(i) ) 'der jeweilige Zellbereich
REM oZellbereich.supportsService("com.sun.star.sheet.SheetCell")
oZellbereich.TableBorder = rahmen
next
end Sub
Brauchst du noch mehr Bereiche, so erweitere einfach den Bereichsarray

Was allerdings deine "supportsService" Zeile soll, ist mir schleierhaft. entweder du scheibst eine Bedingung (wie Stefan) oder du lässt sie weg. So hat sie keine Wirkung!
Viele Grüße
Thomas
Verfasst: So, 27.08.2006 10:42
von turtle47
Hallo Toxitom,
erst mal Dankeschön für die Antwort.
Habe leider nicht soviel Zeit mich mit Programmierung auseinanderzusetzen.
Bislang habe ich mir immer Makrofragmente aus diesem Forum zu einem Makro zusammengestell.
Leider weiss ich nicht immer genau wofür was genau ist.
Werde mir jetzt aber mal das Buch über Basicprogrammierung für OOo zulegen.
Edit: Hab da noch zwei Fragen. Ist es ohne großen Aufwand möglich,
dass in dem definierten Bereich
alle einzelnen Zellen den farbigen Rahmen haben
und wie kann ich den Rahmen zurücksetzen?
Schöne Grüße
Jürgen
Verfasst: So, 27.08.2006 16:08
von Toxitom
Hey Jürgen,
na ja, vielleicht solltest du dir doch ein Buch zu OOo Basic zulegen

(z.B. siehe unten).
Wenn du jede Zelle mit einem Rahmen versehen willst, benötigst du kein TableBorder-Objekt, sondern für jeden Strich ein "BorderLine-Objekt". Das kannst du zusätzlich oder ausschliesslich nutzen. Oder - hier vielleicht einfacher - du fügst jede Zelle als einzelne Adresse im Array auf
Gruss
Thomas
Verfasst: Mi, 30.08.2006 21:37
von turtle47
Hi Toxitom,
Werbung an:
Tari Tara
das Buch ist da.
Und das schon nach 2 Tagen per Onlinebestellung (Versandkostenfrei)
Echt klasse der Schmöker. Habe direkt mehrer Dinge gefunden die ich
noch gesucht habe.
Die Investition hat sich gelohnt.
Werbung aus
Schöne Grüße
Jürgen