Neuigkeiten:

Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!

Mobiles Hauptmenü

Ganze Zeile im Endlosformular einfärben, wenn Zellinhalt = X

Begonnen von Foxtra, Februar 12, 2011, 16:02:02

⏪ vorheriges - nächstes ⏩

Foxtra

Hallo,

erstmal ein Hallo an alle, bin neu hier und hoffe auf Eure Hilfe! Ich verwende Access 2007.

Ich habe ein Endlosformular als Ufo mit mehreren Spalten. Ich möchte gerne die ganze Zeile in Abhängigkeit vom Textinhalt einer bestimmten Zelle einfärben. Mit der bedingten Formatierung gelingt das nur für die entsprechende Zelle.

Hat jemand einen Tipp für mich?
_________________
LG

Karin

bahasu

Hallo,

vielleicht hilft das:
Im Formular beim Ereignis "Beim Öffnen" eintragen:

   Dim oFmtC As FormatCondition
   Dim ctl As Control

'   grauen Hintergrund für die Bedingung installieren
   For Each ctl In Me.Controls
       If ctl.ControlType >= acTextBox And ctl.ControlType <= acComboBox Then
           Me(ctl.Name).FormatConditions.Delete
       
           Set oFmtC = Me(ctl.Name).FormatConditions.Add(acExpression, , "DeineBedingung = True")  'Bedingung
           Me(ctl.Name).FormatConditions(0).BackColor = 13285815        ' grau
           
           Set oFmtC = Me(ctl.Name).FormatConditions.Add(acExpression, , "DeineBedingung = False")  'Bedingung
           Me(ctl.Name).FormatConditions(1).BackColor = 16777215        ' weiß
       End If
   Next ctl

Harald
Servus

Foxtra

Hallo Harald,

danke erstmal! Ich versuche, den Code zu verstehen, kenne mich mit VBA noch nicht so doll aus.

Die Einfärbung aller Steuerelemente in einer Zeile des Ufos soll in Abhängigkeit des Textinhalts einer bestimmten Zelle in dieser Zeile erfolgen. Wie muss ich den Code anpassen, damit Bezug auf genau diese Zelle genommen wird? "Me(ctl.Name)" mit dem Namen des entsprechenden Steuerelements ersetzen? "DeineBedingung" ersetze ich mit dem entsprechenden Textinhalt dieser Zelle.

Oder verstehe ich da was falsch?

LG

Karin

DF6GL

Hallo,

stell doch für JJEDES Textfeld die gleiche (richtig definierte) Bedingte Formaitierung ein....

Wenn die Textfelder lückenlos aneinander hängen, dann wird die "ganze Zeile" (was verstehst Du denn genau dadrunter? )  entspr. formatiert.




Foxtra

sorry, war vielleicht etwas unklar ausgedrückt...

Mit "ganze Zeile" meine ich jedes einzelne Textfeld in der Zeile des Endlos-Ufos. Das Endlos-Ufo hat insgesamt 15 Spalten, also 15 Textfelder in einer Zeile. Eines dieser Textfelder enthält den Wert in Form von Text, der die Hintergrundfarben der anderen Textfelder einstellen soll. Enthält dieses Textfeld z.B. ein X, so sollen alle Textfelder dieses Datensatzes (dieser Zeile) die Hintergrundfarbe grün haben. Enthält dieses Textfeld ein Y, dann soll die Hintergrundfarbe rot sein, etc.

Mit bedingter Formatierung komme ich da derzeit nicht weiter, da ich damit ja von einem Textfeld nicht auf ein anderes verweisen kann, sprich, ich kann nicht sagen, wenn Feld abc den Wert X enthält, soll die HG-Farbe im Feld xyz rot sein. Oder habe ich da etwas übersehen?

LG

Karin

database

Hallo Karin,

in den Forumsregeln ist's zu lesen C R O S S P O S T I N G ist hier nicht gern gesehen!
http://www.office-loesung.de/ftopic441342_0_0_asc.php

Mit     For Each ctl In Me.Controls     wird die Auflistung der Formularsteuerelemente aufgerufen

wird ein Steuerelement der Klasse Textfeld oder Kombibox gefunden, wird mit

Me(ctl.Name)    dessen Name ermittelt und dann per     .FormatConditions.Delete      die Formateinstellungen gelöscht um danach abhängig von
der Erfüllung der Bedingung, die du in diesem Codeteil natürlich eintragen musst - Hilfe dazu bekommst du in der OH unter dem Suchbegriff FormatCondition.

Set oFmtC = Me(ctl.Name).FormatConditions.Add(acExpression, , "DeineBedingung = True")
Ist die Bedingung erfüllt, wird mit ....

Me(ctl.Name).FormatConditions(0).BackColor = 13285815          
die Hintergrundfarbe auf GRAU  (13285815)  gesetzt.  Diese Zahlenwerte bekommst du u.A. im VBA-Editor angezeigt.

HTH

bahasu

Hi

Wenn Du z.B. ein Feld mit dem Namen Status hast und der als Inhalt den Wert "beendet" haben kann,
könnte Du statt "DeinBedingung = true" dann schreiben Status = "beendet".

Mit der for each-Schleife ersparst Du Dir, die Formatierung 15* zu machen

Harald
Servus

DF6GL

HAllo,

"Oder habe ich da etwas übersehen?"


Ja...

Bedingte Formierung für JEDES Feld:

Ausdruck ist :   [FeldABC]="X"

bahasu

#8
Moin Karin,

und als Zusammenfassung der obigen Beiträge:
   Dim oFmtC As FormatCondition
   Dim ctl As Control

'   grauen Hintergrund für die Bedingung installieren
   For Each ctl In Me.Controls
       If ctl.ControlType >= acTextBox And ctl.ControlType <= acComboBox Then
           Me(ctl.Name).FormatConditions.Delete
       
           Set oFmtC = Me(ctl.Name).FormatConditions.Add(acExpression, , "[DeinFeld] = "X")  'Bedingung
           Me(ctl.Name).FormatConditions(0).BackColor = 13285815        ' grau
           
           Set oFmtC = Me(ctl.Name).FormatConditions.Add(acExpression, , "[DeinFeld] = "Y")  'Bedingung
           Me(ctl.Name).FormatConditions(1).BackColor = 16777215        ' weiß
       End If
   Next ctl


Bei DeinFeld bitte den Namen Deines Feldes eintragen (im Formular-Entwurf das Feld anklicken: mit der rechten-Maustaste die Eigenschaften aufrufen, den Reiter ANDERE auswählen, den bei NAME stehenden Begriff verwenden).

Harald
Servus

Maxel

Ich helfe mir in solchen Fällen mit folgendem Trick:

Ein Textfeld - so breit wie alle Felder zusammen - erhält die Bedingte Formatierung.

Über diesem Textfeld liegen alle Steuerelemente, wobei Text- und Kombifelder transparent sind.

Damit erspart man sich den Code und es hat den Vorteil, dass auch Bezeichnungsfelder, die nicht von der Bedingten Formatierung zu erfassen sind, farbig erscheinen.
Viele Grüße
Maxel


Foxtra

Zitat von: database am Februar 12, 2011, 18:04:09
Hallo Karin,

in den Forumsregeln ist's zu lesen C R O S S P O S T I N G ist hier nicht gern gesehen!
http://www.office-loesung.de/ftopic441342_0_0_asc.php


Danke für den Hinweis, aber ich sehe das nicht als Crossposting an. Wenn ich in einem Forum keine befriedigende Antwort erhalte, versuche ich es in einem weiteren Forum....

Danke auch für die Erläuterungen des Codes und die Tipps von allen! Ich werde es morgen gleich mal versuchen, zu implementieren.

LG

Karin


MzKlMu

Hallo,
ZitatWenn ich in einem Forum keine befriedigende Antwort erhalte, versuche ich es in einem weiteren Forum....
Du hattest ja noch nicht mal eine Rückfrage und Maxel hat den gleichen Vorschlag gemacht wie in dem anderen Forum.
Diese Vorschläge sind für mich übrigens das einfachste.
Gruß Klaus

Foxtra

Zitat von: DF6GL am Februar 12, 2011, 19:45:52
HAllo,

"Oder habe ich da etwas übersehen?"


Ja...

Bedingte Formierung für JEDES Feld:

Ausdruck ist :   [FeldABC]="X"

Tausend Dank, Franz!

Habe tatsächlich die Möglichkeit "Ausdruck ist" völlig übersehen...

Damit funktioniert es perfekt!

LG

Karin

TomTom2903

Hallo,
die Funktion muss man dann für jeden Datensatz im Endlosformular durchlaufen, oder?!

Was bietet sich dann am besten an? rst.eof?
Gruß
Tom