Zellenfarbe automatisch ändern

Antwort erstellen


BBCode ist eingeschaltet
[img] ist ausgeschaltet
[url] ist eingeschaltet
Smileys sind ausgeschaltet

Die letzten Beiträge des Themas
   

Ansicht erweitern Die letzten Beiträge des Themas: Zellenfarbe automatisch ändern

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

von Karolus » Do, 28.12.2006 10:57

Hallo Holger
Wie kann das Makro nun automatisch gestartet werden, sobald ein Name in den Kalender eingetragen wird?
"Automatisch" geht es zunächst nur bei der ersten Änderung im Kalender nach dem offnen.
(->extras->Anpassen-'Ereignisse'--'Geändert-Status wurde geändert' )

Ich würde es daher mit einer Schaltfläche im Dokument manuell starten.

Gruß Karo

von HolgerSiefert » Do, 28.12.2006 08:47

Das funktioniert schon mal gut. Ich führe das Makro aus und die Farben ändern sich entsprechend dem Zelleninhalt.

Wie kann das Makro nun automatisch gestartet werden, sobald ein Name in den Kalender eingetragen wird?

von Karolus » Do, 28.12.2006 01:00

Hallo Holger

Vielleicht hilft dir folgendes Makrobeispiel, es setzt die Hintergrundfarbe oder auch die Zellvorlage abhängig vom Inhalt der Zellen in einem selektierten Bereich.

Code: Alles auswählen

sub bereichshintergrund
odoc = thisComponent
osheet = odoc.currentcontroller.activesheet
obereich = odoc.getcurrentselection()
      StartSp = obereich.rangeAddress.startColumn
      StartZe = obereich.rangeAddress.startRow
      EndSp = obereich.rangeAddress.EndColumn
      EndZe = obereich.rangeAddress.EndRow
      msgbox (startSp)
for n = StartSp to Endsp
	for m = StartZe to EndZe
	ocell = osheet.getCellByPosition(n,m)
 	if oCell.string = ""  then oCell.CellBackColor = -1 'Farbe zurücksetzen
 	if oCell.string = "Fritz" then oCell.CellBackColor = RGB(0,255, 0) 'Direkte Zuweisung von Hintergrundf.
	if oCell.string = "Franz" then oCell.CellBackColor = RGB(250,255, 0)
	if oCell.string = "Karl-Otto" then oCell.Cellstyle = "deinVorlagenname" 'Zuweisung einer Zellvorlage
  ' if oCell.string = "A" then oCell.CellBackColor = RGB(255,0, 0)
  ' if oCell.string = "B" then oCell.CellBackColor = RGB(0,0,255)
  ' if oCell.string = "C" then oCell.CellBackColor = RGB(0,50,55)
		
	next m
next n
end sub
Gruß Karo

von HolgerSiefert » Mi, 27.12.2006 23:57

Danke für die Tipps. Das hilft mir jedoch nicht weiter, da ich eine Kalender (hier Dienstplan) habe und da schreibe ich dann die Namen rein. Wenn dann am Montag z.B. Holger eingetragen wird soll die Zelle grün werden und wenn z.B. Franz eingetragen wird soll die Zelle blau werden.

Mit den bisherigen Tipps krieg ich das nicht hin!

von Eia » Di, 26.12.2006 17:56

HolgerSiefert hat geschrieben:Problem 1: ich schreibe die Formel in die Zelle und sobald ich was in die Zelle einfüge ist die Formel gelöscht.
Das ist normal. Wenn Du den bisherigen Inhalt durch einen neuen ersetzt. Du musst den eigentlichen Inhalt der Zelle ergänzen durch +VORLAGE("Vorlagenname") bzw, wenn der Inhalt keine Zahl ist durch: &T(VORLAGE("Vorlagenname")).
Beschreibung der gewünschten Funktion: ich habe einen Dienstplan in den x Namen geschrieben werden. Jeder Name soll durch eine vorgegebene Farbe automatisch hinterlegt werden.
Mit der Bedingten Formatierung klappt das... allerdings nur bis 3 Personen!
Am besten, Du legst in einer unbenutzten Tabelle eine Liste an:
in Spalte A die Namen der Mitarbeiter, daneben jeweils den Namen der anzuwendenden Zellvorlage. Gut ist auch, wenn Du diese zwei Spalten ganz markierst und über Einfügen/Namen einen Namen zuordnest, dann kannst Du Dich später mit diesem Namen auf sie referenzieren, das ist einfacher als der Zellbereich. Wenn ich mal annehmme, der Bereich mit den Namen und Vorlagen heisst 'Vorlagennamen', dann kannst Du eine Vorlage daraus in jeder beliebigen Zelle so zuordnen:
="Name des Mitarbeiters"&SVERWEIS("Name des Mitarbeiters";Vorlagenname;2;0).

Mehr dazu im wiki

von turtle47 » Di, 26.12.2006 17:50

Hallo Holger,

schau Dir dieses Thread mal an:

viewtopic.php?t=5645&highlight=bedingte+formatierung

Vieleicht hilft Dir das weiter.

Viel Erfolg

Jürgen

von HolgerSiefert » Di, 26.12.2006 17:16

Problem 1: ich schreibe die Formel in die Zelle und sobald ich was in die Zelle einfüge ist die Formel gelöscht.

Beschreibung der gewünschten Funktion: ich habe einen Dienstplan in den x Namen geschrieben werden. Jeder Name soll durch eine vorgegebene Farbe automatisch hinterlegt werden.
Mit der Bedingten Formatierung klappt das... allerdings nur bis 3 Personen!

von FranzX » Di, 26.12.2006 16:52

Hallo,

dazu must du die Funktion VORLAGE() verwenden. Mit dieser Funktion kannst du beliebig viele Farben (Zellvorlagen) zuweisen.

z.B:

=C3+VORLAGE(WENN(AKTUELL()>10;"Blassgelb";"weiß"))

färbt die Zelle C3 mit der Zellvorlage"Blassgelb" ein wenn der Inhalt größer als 10 ist. Ansonsten wird die Zellvorlage "weiß" zugewiesen.
Mehr dazu findest du in der Hilfe.

Viele Grüße
FranzX
-----------------------------------------------------------------
TIPP:OpenOffice.org Calc - Formeln und Funktionen

Mehr als 3 Bedingungen

von HolgerSiefert » Di, 26.12.2006 15:03

Danke dafür, das funktioniert schon mal sehr gut!

Wie kann ich mehr als 3 Bedingungen erstellen? In meinem Fall bedeutet das mehr als 3 Farben.

von Karolus » Di, 26.12.2006 09:48

Hallo

Erstelle zunächst eine neue Zellvorlage mit der gewünschten Hintergrundfarbe
(<F11>-Zellvorlage-neu).
Danach benutzt du ->Format->Bedingte Formatierung :
'Formel ist'
ISTTEXT(A1)
und darunter die gerade entworfene Zellvorlage auswählen.

Auf einen grösseren Zellbereich lässt sich diese bed. Formatierung einfach mit dem 'Pinsel' übertragen.

Gruß Karo

Zellenfarbe automatisch ändern

von HolgerSiefert » Di, 26.12.2006 08:33

Ich möchte in einer Tabelle die Zellenfarbe automatisch ändern lassen.
Je nach Inhalt (hier Text z.B. Fritz, Franz u.s.w.) soll die Zelle eine bestimmte Farbe annehmen.

Mit der Formelvorlage `VORLAGE` komme ich nicht so richtig weiter.

Nach oben