Zellenfarbe automatisch ändern

Das Tabellenkalkulationsprogramm

Moderator: Moderatoren

HolgerSiefert
Beiträge: 6
Registriert: Di, 26.12.2006 08:28

Zellenfarbe automatisch ändern

Beitrag von HolgerSiefert »

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.
Karolus
********
Beiträge: 7163
Registriert: Mo, 02.01.2006 19:48

Beitrag von Karolus »

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
HolgerSiefert
Beiträge: 6
Registriert: Di, 26.12.2006 08:28

Mehr als 3 Bedingungen

Beitrag von HolgerSiefert »

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.
FranzX
*****
Beiträge: 408
Registriert: Sa, 21.02.2004 16:17

Beitrag von FranzX »

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
HolgerSiefert
Beiträge: 6
Registriert: Di, 26.12.2006 08:28

Beitrag von HolgerSiefert »

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!
turtle47
*******
Beiträge: 1849
Registriert: Mi, 04.01.2006 20:10
Wohnort: Rheinbach

Beitrag von turtle47 »

Hallo Holger,

schau Dir dieses Thread mal an:

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

Vieleicht hilft Dir das weiter.

Viel Erfolg

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
Eia
********
Beiträge: 2614
Registriert: Sa, 23.12.2006 07:40

Beitrag von Eia »

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
HolgerSiefert
Beiträge: 6
Registriert: Di, 26.12.2006 08:28

Beitrag von HolgerSiefert »

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!
Karolus
********
Beiträge: 7163
Registriert: Mo, 02.01.2006 19:48

Beitrag von Karolus »

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
HolgerSiefert
Beiträge: 6
Registriert: Di, 26.12.2006 08:28

Beitrag von HolgerSiefert »

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?
Karolus
********
Beiträge: 7163
Registriert: Mo, 02.01.2006 19:48

Beitrag von Karolus »

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
Stephan
********
Beiträge: 12354
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Beitrag von 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: 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
Antworten