Seite 1 von 2

Bedingte Formatierung mit Makro

Verfasst: Mi, 04.01.2006 20:46
von turtle47
Hallo User,
bin auf der Suche nach einem Makro um in einer Tabelle eine bedingte Formatierung durchzuführen, weil die "normale" bedingte Formatierung leider nur 3 Möglichkeiten zulässt ich aber mehr brauche.

Wenn ich in eineTabelle z.B. ein "G" eintrage soll der Hintergrund der Zelle z.B. gelb werden, bei "K" z.B. rot, bei "T" z.B. blau, usw.

Für die Hilfe vielen Dank im voraus.

Verfasst: Do, 05.01.2006 02:40
von berndkli
Hallo Turtle 47

Makro ist vielleicht gar nicht nötig, geht auch mit Formeln.
Schau hier mal¨

http://www.ooowiki.de/BedingteFormatier ... rieCalc%29

Gruss B.

Verfasst: Do, 05.01.2006 17:07
von Karolus
Hallo
mit
......&T(VORLAGE(AKTUELL()
als Zusatz zu einer Formel kannst du beliebig viele verschiedene Vorlagen einer Zelle zuweisen. Dazu musst du zunächst aber entsprechende Vorlagen mit den Namen
"G","K"und "T" erstellen.
Dein Problem ist aber dann daß du die Zeichen "G"..usw. dann nicht direkt in die zelle schreiben kannst, sondern nur über eine Formel.
Vielleicht findet sich ja jemand der dafür ein Makro schreibt ?

Gruß
Karo

Verfasst: Do, 05.01.2006 20:36
von turtle47
Hallo berndkli und karolus,

vielen Dank für die schnellen Antworten aber leider kann ich mit Formeln
in der Tabelle für meine Anwendung nichts anfangen.
Vieleicht hätte ich das Problem etwas näher erläutern sollen.

Es geht um eine Monatsübersicht für Mitarbeiter in der Urlaub, Krank, Frei
und andere besonderen Tage mit einem Kürzel eingetragen weren.
Die Mitarbeiter stehen in der linken Spalte untereinander, in der oberen
Zeile die Wochentage nebeneinander. Wenn ich jetzt in einer Zelle z.B. ein "U"
eintrage soll die Zelle z.B. grün hinterlegt werden. Mit einer Formel
geht das leider nicht weil die Formel überschrieben wird.
Habe ein solches Makro für so einen Fall schon mal für Excel gesehen.
War gar nicht so umfangreich. Nur ca. 20 Zeilen. Leider funktioniert das Makro
natürlich nicht unter oo.org. Oder doch????

Das habe ich für Excel gefunden:
Excel kann bekanntlich nur 3 bedingte Formatierungen pro Zelle verarbeiten. Dieses kleine Makro simuliert eine bedingte Formatierung. Wie Ihr sehen werdet, kann man auf diesem Wege jede Zelle mehrfach formatieren. Die bedingte Formatierung wird in diesem Fall nicht einmal benötigt.

Private Sub Worksheet_SelectionChange(ByVal Target As Excel.Range)
Dim cell As Range
For Each cell In Range("B2:H10")
If cell.Value = "X" Then cell.Font.ColorIndex = 15
If cell.Value = "L" Then cell.Font.ColorIndex = 3
If cell.Value = "T" Then cell.Font.ColorIndex = 41
If cell.Value = "R" Then cell.Font.ColorIndex = 10
If cell.Value = "R" Then cell.Font.FontStyle = "Fett"
If cell.Value = "E" Then cell.Font.ColorIndex = 15
If cell.Value = "F" Then cell.Font.ColorIndex = 3
If cell.Value = "D" Then cell.Interior.ColorIndex = 3
If cell.Value = "" Then cell.Clear
Next
End Sub

Bis dann.

JD

Verfasst: Fr, 06.01.2006 09:20
von Toxitom
Hey turtle47,

hmm, also im Grunde genommen geht das in OOo genauso - mit dem Makro. Nur: ein Makro muss seperat gestartet werden, es ändert sich alos nicht automatich die Farbe der Zelle, wenn du dort etwas einträgst (obwohl, auch das wäre technisch realisierbar).
Um die Hintergundfarbe einer Zelle entsprechend dem INhalt zu verändern, hier das Prinzip-Makro:

Code: Alles auswählen

sub FarbAenderung
        oDoc = thisComponent    'das Dokument
	oSheet = oDoc.sheets(0)   'erste Tabellenblatt
	oCell = oSheet.getCellRangeByName("B3")  ' Zelle B3
	if oCell.string = ""  then oCell.CellBackColor = -1     keine Farbe
	if oCell.string = "X" then oCell.CellBackColor = RGB(0,255, 0)
	if oCell.string = "U" then oCell.CellBackColor = RGB(250,255, 0)
end sub
und so weiter eben. Hier wird jedoch nur der Text einer Zelle ausgewertet, keine Zahlen. Das ganze packst du dann noch in eine Schleife über alle diene gewünschten Zellen - fertig. Aber: Du musst das Makro eben manuell auslösen - zum Beispiel durch einen Schalter in der Tabelle.

Viele Grüße
Thomas

Bin begeistert

Verfasst: Fr, 06.01.2006 19:07
von turtle47
Hallo Toxitom,

auch Dir vielen Dank für die schnelle Hilfe.

Sieht sehr gut aus und funktioniert super.

Kann man aber anstelle der Zelle nicht direkt einen Zellbereich angeben.
Ich habe zwar keine Ahnung, aber dann könnte man doch die Schleife weglassen.
Habe versucht anstelle "B3" mal "B2:Z20" einzugeben,
aber das funktioniert nicht. warum? :oops:


Viele Grüße

Jürgen

Verfasst: Fr, 06.01.2006 19:31
von Stephan
warum?
Weil in einem Zellbereich jede Zelle einen idividuellen Inhalt hat. Du müstest also durch jde Zelle des Bereichs interieren.


Gruß
Stephan

Verfasst: Fr, 06.01.2006 19:57
von turtle47
Hi Stephan,

bei Excel geht das doch auch.

Code: Alles auswählen

Private Sub Worksheet_SelectionChange(ByVal Target As Excel.Range)
Dim cell As Range
For Each cell In Range("B2:H10") 
Geht das in oo.org nicht auch?

Muss noch dazu sagen, bin absoluter Neuling.

Viele Grüsse und trotzdem Danke für jede Hilfe

Jürgen

Verfasst: Sa, 07.01.2006 11:00
von Toxitom
Hey turtle,
Geht das in oo.org nicht auch?
Nein. Das ist eine Spezialfunktion von VBA, die gibt es in OOo nicht.

Gruss
Thomas

Schade

Verfasst: Sa, 07.01.2006 11:20
von turtle47
Hallo Toxitom,

schade das es nicht geht.
Trotzdem vielen Dank.

Ich bin immer wieder erstaunt, wie schnell einem hier geholfen wird.
Respekt an alle hier im Forum.

Jürgen

Verfasst: Sa, 07.01.2006 15:04
von Bembel
Hey turtle47,
habe auch ein Anwesenheitsliste erstell, mit Bedingter Formatierung.
Grund Farbe z.B der Zelle "C 8". Schwarz
z:B Blau = I Und O
Die Formel unter Bedingter Formatierung ist
WENN(ODER(C8="I";C8="O");WAHR();FALSCH())
z.B Grün = T ,GL, E ,VL , L , und VR
Die Formel unter Bedingter Formatierung ist
WENN(ODER(C8="T";C8="GL");WAHR();FALSCH())+WENN(ODER(C8="E";C8="VL");WAHR();FALSCH())+WENN(ODER(C8="L";C8="VR");WAHR();FALSCH())
z.B Rot = K,KK und F
Die Formel unter Bedingter Formatierung ist
WENN(ODER(C8="K";C8="KK");WAHR();FALSCH())+WENN(C8="F";WAHR();FALSCH())
Die Farben müssen aber erst mit Formatvorlagen (Neue Vorlge aus Selektion) erstellt werden!

Gruß Bembel

Verfasst: Sa, 07.01.2006 15:52
von turtle47
Hallo Bembel,

Brauche aber mehr als drei Farben.

Viel Grüße

Jürgen

Verfasst: Sa, 07.01.2006 20:41
von Bembel
Hi turtle47,
es sind 4 Farben

Schwarz , Grün , Blau und Rot,mehr geht nicht ohne Makros .

Gruß Bembel

Die Lösung

Verfasst: So, 08.01.2006 16:23
von turtle47
Hallo User

ich hab die Lösung

Code: Alles auswählen

sub FarbAenderung            'Füllt die Zellen mit Farbe
   oDoc = thisComponent      'das Dokument
   oSheet = oDoc.sheets(0)   'erstes Tabellenblatt
   For ze = 4 to 32          'Zeilenzähler
   For sp = 2 to 32          'Spaltenzähler
   oCell = oSheet.getCellByPosition(sp,ze)
  
   if oCell.string = "" then oCell.CellBackColor = RGB(255,255, 255)     'keine Farbe
   if oCell.string = "J" then oCell.CellBackColor = RGB(0,102, 204) 'Jahresurlaub blau
   if oCell.string = "H" then oCell.CellBackColor = RGB(0,102, 204) 'halber Urlaubstag blau
   if oCell.string = "K" then oCell.CellBackColor = RGB(250,255, 102) 'Krank gelb
   if oCell.string = "B" then oCell.CellBackColor = RGB(0,174, 0) 'Berufsschule grün
   if oCell.string = "W" then oCell.CellBackColor = RGB(255,153, 102) 'Weiterbildung orange
   if oCell.string = "U" then oCell.CellBackColor = RGB(255,51, 51) 'Fehlen unentschuldigt rot
   
next
   next
end sub

sub SW						     'Löscht die Farben in den Zellen für S/W Darstellung
   oDoc = thisComponent      'das Dokument
   oSheet = oDoc.sheets(0)   'zweites Tabellenblatt
   For ze = 4 to 32          'Zeilenzähler
   For sp = 2 to 32          'Spaltenzähler
   oCell = oSheet.getCellByPosition(sp,ze)
  
   if oCell.string = "" then oCell.CellBackColor = RGB(255,255, 255)     'keine Farbe
   if oCell.string = "J" then oCell.CellBackColor = RGB(255,255, 255) 'Jahresurlaub blau
   if oCell.string = "H" then oCell.CellBackColor = RGB(255,255, 255) 'halber Urlaubstag blau
   if oCell.string = "K" then oCell.CellBackColor = RGB(255,255, 255) 'Krank gelb
   if oCell.string = "B" then oCell.CellBackColor = RGB(255,255, 255) 'Berufsschule grün
   if oCell.string = "W" then oCell.CellBackColor = RGB(255,255, 255) 'Weiterbildung orange
   if oCell.string = "U" then oCell.CellBackColor = RGB(255,255, 255) 'Fehlen unentschuldigt rot
   
next
   next
end sub
Oder gibt es noch ne einfachere Lösung?? :idea:

Gruß

Jürgen

Verfasst: So, 08.01.2006 17:21
von Karolus
Hallo
Mit dieser Einleitung:

Sub format_HiGruFarbe
oSelect=ThisComponent.CurrentSelection
oColumn=oselect.Columns
oRow=oSelect.Rows
For n= 0 To oColumn.getCount-1
For m = 0 To oRow.getCount-1
oCell=oselect.getCellByPosition (n, m)

"deine Format Zeilen"
und diesem Schluss:

Next m
Next n
End Sub


-brauchst du den gewünschten Bereich nur vorher selektieren, und das Makro starten

Gruß
Karo