diesmal handelt es sich um eine Fortsetzung eines Threads von mir:
Calc: Angewendete Zell-Formatvorlage tauschen, welches aber diesmal ein LibreOffice (LO) Problem ist.
Folgender Code,
Code: Alles auswählen
Sub ROTEIN
oRange = ThisComponent.Sheets(0).getCellRangeByName("A1:B6")
oSuchen = oRange.createReplaceDescriptor()
With oSuchen
.SearchStyles = TRUE
.SearchString = "GRUEN"
.ReplaceString = "ROT"
End With
oRange.replaceAll( oSuchen )
With oSuchen
.SearchStyles = TRUE
.SearchString = "GRUENEZAHLEN"
.ReplaceString = "ROTEZAHLEN"
End With
oRange.replaceAll( oSuchen )
End Sub
Die Buttons die für diesen, und ähnlichen (*) Code zuständig sind, lauten wie folgt:
- Rot einschalten
- Gruen einschalten
(*) ähnlich deshalb, weil er aus ROT wieder GRUEN machen soll, also umgekehrt gegenüber dem gezeigten Code.
Warum ich auf den alten Thread von mir verlinkt habe kommt jetzt.
Der dort eingangs gezeigte Code hatte mich dazu inspiriert, ihn etwas umzuschreiben. Und heraus kam dabei folgendes.
Code: Alles auswählen
Sub ROTEIN
oBlatt = ThisComponent.sheets(0)
oHintergrund = oBlatt.getCellRangeByName("A1:B3")
IF oHintergrund.CellStyle = "GRUEN" THEN
oHintergrund.CellStyle = "ROT"
END IF
oText = oBlatt.getCellRangeByName("A5:B6")
IF oText.CellStyle = "GRUENEZAHLEN" THEN
oText.CellStyle = "ROTEZAHLEN"
END IF
end Sub
ABER!
So bald in dem Zellbereich auch nur eine einzige Zelle ohne, oder mit einer anderen Formatvorlage versehen ist, werden die Formatvorlagen nicht getauscht.
Ein einfaches Beispiel:
Gegebener Zellbereich = A1 bis A4
Zellbereich A1:A4 durchgehend mit identischer Formatvorlage versehen, also werden alle getauscht.
Zellbereich A1:A2 mit identischer Formatvorlage, und A3 ohne oder andere, und A4 wieder mit der identischen wie A1:A2, so werden keine Formavorlagen getauscht.
Ist auch logisch, da folgendes
Code: Alles auswählen
XRAY ThisComponent.sheets(0).getCellRangeByName("A1:A4").CellStyle
Eigentlich könnte ich damit ja leben. Aber in meinem Projekt werden nicht nur durchgehende Zellbereiche mit ein und derselben Formatvorlage versehen -{wo ich also das 2. gezeigte Beispiel anwenden kann}- , sondern auch unterbrochene Zellbereiche in der Form von:
B1, D1, F1, H1, J1 ...
In der Beispieldatei habe ich nicht nur den ersten Code eingebaut, der wie oben schon erwähnt aufgerufen werden kann, sondern auch den zweiten Code der wie folgt aufgerufen werden kann:
- Rot einschalten in LO
- Gruen einschalten in LO
In OOo und AOO funktionieren bei Code-Arten, jedoch nicht in LO ab ca. 3.6.x.x (vielleicht auch schon früher).
Meine Fragen lauten also jetzt:
- Warum funktioniert der erste hier gezeigte Code mit dem createReplaceDescriptor in LO ab ca. 3.6.x.x nicht?
- Wie müsste der erste Code geändert werden, damit er auch in LO funktioniert?
- Wie könnte eine alternative aussehen?
- Wer kann mir helfen?
Ich bedanke mich schon mal im voraus für Eure Bemühungen.
Gruß
balu