von Stephan » Do, 28.12.2006 14:11
Man müßte das Makro im Prinzip über einen Listener des Typs XSelectionChangeListener starten damit es automatisch arbeitet.
Da aber nun ohnehin bereits ein Makro zur Lösung der Aufgabe dient, würde ich mir diesen Aufwand sparen und stattdessen gleich die benötigten bedingten Formatierungen einmalig per Makro eintragen, dann kümmert sich OOo automatisch um den Rest.
Für eine bedingte Formatierung mit 10 Bedingungen beispielsweise so:
Code: Alles auswählen
Sub bedingte_zellformatierung()
'Kriterien und Vorlagen definieren
Dim kuv(1, 9) As String
'Bedingungen
kuv(0, 0) = "Klaus"
kuv(0, 1) = "Peter"
kuv(0, 2) = "Hans"
kuv(0, 3) = "Martin"
kuv(0, 4) = "Uwe"
kuv(0, 5) = "Michael"
kuv(0, 6) = "Dieter"
kuv(0, 7) = "Wilfried"
kuv(0, 8) = "Gerd"
kuv(0, 9) = "Dirk"
'Vorlagennamen
kuv(1, 0) = "klaus"
kuv(1, 1) = "peter"
kuv(1, 2) = "hans"
kuv(1, 3) = "martin"
kuv(1, 4) = "uwe"
kuv(1, 5) = "michael"
kuv(1, 6) = "dieter"
kuv(1, 7) = "wilfried"
kuv(1, 8) = "gerd"
kuv(1, 9) = "dirk"
Dim bedingtes_format as Object
range = ThisComponent.GetCurrentSelection.rangeAddress
With range
a_s = .startColumn
a_z = .startRow
e_s = .EndColumn
e_z = .EndRow
End With
Dim zellformat(3) as New com.sun.star.beans.PropertyValue
zellformat(0).Name = "Operator"
zellformat(0).Value = com.sun.star.sheet.ConditionOperator.EQUAL
zellformat(1).Name = "Formula1"
zellformat(2).Name = "StyleName"
blatt = ThisComponent.CurrentController.ActiveSheet
For i = a_s to e_s
For j = a_z to e_z
bedingtes_format = blatt.getCellByPosition(i, j).ConditionalFormat
For k = 0 To 9
zellformat(1).Value = CHR(34) & kuv(0, k) & CHR(34)
zellformat(2).Value = kuv(1, k)
bedingtes_format.addNew( zellformat() )
Next k
blatt.getCellByPosition(i, j).ConditionalFormat = bedingtes_format
Next j
Next i
Msgbox "Fertig - bedingte Zellformatierungen wurden eingetragen."
End Sub
Hinweis:
*die Zellformatvorlagen mit Namen klaus ... dirk müssen erstellt werden bevor(!) das Makro gestartet wird.
*das Makro arbeitet nur innerhalb eines geschlossenenen Zellbereiches (oder einer einzelnen Zelle) der vor Start des Makros markiert sein muß
Gruß
Stephan
Man müßte das Makro im Prinzip über einen Listener des Typs XSelectionChangeListener starten damit es automatisch arbeitet.
Da aber nun ohnehin bereits ein Makro zur Lösung der Aufgabe dient, würde ich mir diesen Aufwand sparen und stattdessen gleich die benötigten bedingten Formatierungen einmalig per Makro eintragen, dann kümmert sich OOo automatisch um den Rest.
Für eine bedingte Formatierung mit 10 Bedingungen beispielsweise so:
[code]Sub bedingte_zellformatierung()
'Kriterien und Vorlagen definieren
Dim kuv(1, 9) As String
'Bedingungen
kuv(0, 0) = "Klaus"
kuv(0, 1) = "Peter"
kuv(0, 2) = "Hans"
kuv(0, 3) = "Martin"
kuv(0, 4) = "Uwe"
kuv(0, 5) = "Michael"
kuv(0, 6) = "Dieter"
kuv(0, 7) = "Wilfried"
kuv(0, 8) = "Gerd"
kuv(0, 9) = "Dirk"
'Vorlagennamen
kuv(1, 0) = "klaus"
kuv(1, 1) = "peter"
kuv(1, 2) = "hans"
kuv(1, 3) = "martin"
kuv(1, 4) = "uwe"
kuv(1, 5) = "michael"
kuv(1, 6) = "dieter"
kuv(1, 7) = "wilfried"
kuv(1, 8) = "gerd"
kuv(1, 9) = "dirk"
Dim bedingtes_format as Object
range = ThisComponent.GetCurrentSelection.rangeAddress
With range
a_s = .startColumn
a_z = .startRow
e_s = .EndColumn
e_z = .EndRow
End With
Dim zellformat(3) as New com.sun.star.beans.PropertyValue
zellformat(0).Name = "Operator"
zellformat(0).Value = com.sun.star.sheet.ConditionOperator.EQUAL
zellformat(1).Name = "Formula1"
zellformat(2).Name = "StyleName"
blatt = ThisComponent.CurrentController.ActiveSheet
For i = a_s to e_s
For j = a_z to e_z
bedingtes_format = blatt.getCellByPosition(i, j).ConditionalFormat
For k = 0 To 9
zellformat(1).Value = CHR(34) & kuv(0, k) & CHR(34)
zellformat(2).Value = kuv(1, k)
bedingtes_format.addNew( zellformat() )
Next k
blatt.getCellByPosition(i, j).ConditionalFormat = bedingtes_format
Next j
Next i
Msgbox "Fertig - bedingte Zellformatierungen wurden eingetragen."
End Sub[/code]
Hinweis:
*die Zellformatvorlagen mit Namen klaus ... dirk müssen erstellt werden bevor(!) das Makro gestartet wird.
*das Makro arbeitet nur innerhalb eines geschlossenenen Zellbereiches (oder einer einzelnen Zelle) der vor Start des Makros markiert sein muß
Gruß
Stephan