Rahmen um Zelle :?:
Moderator: Moderatoren
Rahmen um Zelle :?:
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
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
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
Hallo Stephan,
ich möchte mehrere Zellbereiche mit Rahmen versehen und habe Dein
Makro wie folgt umgeschrieben:
Geht das vieleicht ein wenig kürzer?
Das ganze erscheint mir etwas klobig.
Im voraus vielen Dank.
Jürgen
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
Das ganze erscheint mir etwas klobig.
Im voraus vielen Dank.
Jürgen
Software hat keinen Verstand - benutze deinen eigenen...!
Win 7 SP1/ LibreOffice 3.4.2 OOO340m1 (Build:203) / Firefox 15.0.1 / Notebook ASUS K70IO 64 Bit-Betriebssytem
Win 7 SP1/ LibreOffice 3.4.2 OOO340m1 (Build:203) / Firefox 15.0.1 / Notebook ASUS K70IO 64 Bit-Betriebssytem
Hei Jürgen,
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
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:Geht das vieleicht ein wenig kürzer?
Das ganze erscheint mir etwas klobig.
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

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
Unterstützer LibreOffice, zertifizierter Trainer und Berater
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
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
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
Software hat keinen Verstand - benutze deinen eigenen...!
Win 7 SP1/ LibreOffice 3.4.2 OOO340m1 (Build:203) / Firefox 15.0.1 / Notebook ASUS K70IO 64 Bit-Betriebssytem
Win 7 SP1/ LibreOffice 3.4.2 OOO340m1 (Build:203) / Firefox 15.0.1 / Notebook ASUS K70IO 64 Bit-Betriebssytem
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
na ja, vielleicht solltest du dir doch ein Buch zu OOo Basic zulegen

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
Unterstützer LibreOffice, zertifizierter Trainer und Berater
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
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
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
Software hat keinen Verstand - benutze deinen eigenen...!
Win 7 SP1/ LibreOffice 3.4.2 OOO340m1 (Build:203) / Firefox 15.0.1 / Notebook ASUS K70IO 64 Bit-Betriebssytem
Win 7 SP1/ LibreOffice 3.4.2 OOO340m1 (Build:203) / Firefox 15.0.1 / Notebook ASUS K70IO 64 Bit-Betriebssytem