Bedingte Formatierung mit Makro

Das Tabellenkalkulationsprogramm

Moderator: Moderatoren

turtle47
*******
Beiträge: 1849
Registriert: Mi, 04.01.2006 20:10
Wohnort: Rheinbach

Bedingte Formatierung mit Makro

Beitrag 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.
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
berndkli
*****
Beiträge: 289
Registriert: Di, 12.04.2005 22:05

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

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

Beitrag 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
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
Toxitom
********
Beiträge: 3769
Registriert: Di, 12.08.2003 18:07
Wohnort: Wiesbaden
Kontaktdaten:

Beitrag 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
Unterstützer LibreOffice, zertifizierter Trainer und Berater
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
turtle47
*******
Beiträge: 1849
Registriert: Mi, 04.01.2006 20:10
Wohnort: Rheinbach

Bin begeistert

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

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

Beitrag 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
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
Toxitom
********
Beiträge: 3769
Registriert: Di, 12.08.2003 18:07
Wohnort: Wiesbaden
Kontaktdaten:

Beitrag 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
Unterstützer LibreOffice, zertifizierter Trainer und Berater
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
turtle47
*******
Beiträge: 1849
Registriert: Mi, 04.01.2006 20:10
Wohnort: Rheinbach

Schade

Beitrag 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
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
Bembel
*
Beiträge: 14
Registriert: Fr, 01.10.2004 08:14
Wohnort: Breidenbach

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

Beitrag von turtle47 »

Hallo Bembel,

Brauche aber mehr als drei Farben.

Viel Grüße

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
Bembel
*
Beiträge: 14
Registriert: Fr, 01.10.2004 08:14
Wohnort: Breidenbach

Beitrag von Bembel »

Hi turtle47,
es sind 4 Farben

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

Gruß Bembel
turtle47
*******
Beiträge: 1849
Registriert: Mi, 04.01.2006 20:10
Wohnort: Rheinbach

Die Lösung

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

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