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
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
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
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.
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
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 (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
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
HAllo,
"Oder habe ich da etwas übersehen?"
Ja...
Bedingte Formierung für JEDES Feld:
Ausdruck ist : [FeldABC]="X"
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
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.
Hallo,
Beispiel-DB:
http://www.dbwiki.de/upload/AccSampleBedingteFormatierung.zip
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 (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
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.
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
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
Vgl. Forumseintrag:
-> http://www.access-o-mania.de/forum/index.php?topic=16820.0