Supportnet / Forum / Datenbanken
Datenfelder färben
Frage
Hi Leute,
ich habe folgendes Access-Problem.
Im Body eines Formulars stehten 9 Datenfelder die sich wiederholen. Nun lasse ich mittels VB die Farben selektieren. Dieser sieht wie gefolgt aus:
---
Private Sub Form_Current()
If Me![Skontorestlaufzeit] < 14 Then Me![Lieferant].ForeColor = 32768
If Me![Skontorestlaufzeit] < 14 Then Me![Betrag].ForeColor = 32768
If Me![Skontorestlaufzeit] < 14 Then Me![RE_Eingang].ForeColor = 32768
If Me![Skontorestlaufzeit] < 14 Then Me![SK].ForeColor = 32768
If Me![Skontorestlaufzeit] < 14 Then Me![SKZiel].ForeColor = 32768
If Me![Skontorestlaufzeit] < 14 Then Me![NEZiel].ForeColor = 32768
If Me![Skontorestlaufzeit] < 14 Then Me![SKRest].ForeColor = 32768
If Me![Skontorestlaufzeit] < 14 Then Me![NERest].ForeColor = 32768
If Me![Skontorestlaufzeit] < 14 Then Me![Verantwortlich].ForeColor = 32768
If Me![Skontorestlaufzeit] < 9 Then Me![Lieferant].ForeColor = 4227327
If Me![Skontorestlaufzeit] < 9 Then Me![Betrag].ForeColor = 4227327
If Me![Skontorestlaufzeit] < 9 Then Me![RE_Eingang].ForeColor = 4227327
If Me![Skontorestlaufzeit] < 9 Then Me![SK].ForeColor = 4227327
If Me![Skontorestlaufzeit] < 9 Then Me![SKZiel].ForeColor = 4227327
If Me![Skontorestlaufzeit] < 9 Then Me![NEZiel].ForeColor = 4227327
If Me![Skontorestlaufzeit] < 9 Then Me![SKRest].ForeColor = 4227327
If Me![Skontorestlaufzeit] < 9 Then Me![NERest].ForeColor = 4227327
If Me![Skontorestlaufzeit] < 9 Then Me![Verantwortlich].ForeColor = 4227327
If Me![Skontorestlaufzeit] < 5 Then Me![Lieferant].ForeColor = 255
If Me![Skontorestlaufzeit] < 5 Then Me![Betrag].ForeColor = 255
If Me![Skontorestlaufzeit] < 5 Then Me![RE_Eingang].ForeColor = 255
If Me![Skontorestlaufzeit] < 5 Then Me![SK].ForeColor = 255
If Me![Skontorestlaufzeit] < 5 Then Me![SKZiel].ForeColor = 255
If Me![Skontorestlaufzeit] < 5 Then Me![NEZiel].ForeColor = 255
If Me![Skontorestlaufzeit] < 5 Then Me![SKRest].ForeColor = 255
If Me![Skontorestlaufzeit] < 5 Then Me![NERest].ForeColor = 255
If Me![Skontorestlaufzeit] < 5 Then Me![Verantwortlich].ForeColor = 255
End Sub
---
Wie ihr seht werden die Farben auf das Feld Skontorestlaufzeit bezogen. Wenn nur eine Skontorestlaufzeit-Information (z.B 10) vorliegt funktioniert das ganze schön und gut, aber gibt es mehrere, Beispielsweise 10, 8 und 4 bekomm ich nur eine Farbe, und zwar die in welches Feld ich gerade reinklicke.
Ich denke mal dass mein Ansatz falsch ist. Oder gibt es evtl. eine Möglichkeit das Ganze im Code zu korrigieren ?
Antwort 1 von Michael Ober
Hallo Steffen,
ich denke, daß Dein Ansatz o.k. ist, hast Du die andren Formate wie Hintergrund art, -Farbe und Textfarbe berücksichtigt. Sind die eventuell gleich ?
Gruß Michael
ich denke, daß Dein Ansatz o.k. ist, hast Du die andren Formate wie Hintergrund art, -Farbe und Textfarbe berücksichtigt. Sind die eventuell gleich ?
Gruß Michael
Antwort 2 von Steffen Sammet
Der Hintergrund und so soll ja so weis bleiben wie er ursprünglich ist. Mein Problem liegt darin, dass es im Grunde ja die selben Felder sind, die das selbe Format haben, aber lediglich einen anderen Textinhalt haben.
Antwort 3 von Axel
Hallo Steffen
Also, ich will dir ja nicht zu nahe treten, aber von einem eleganten Programmierstil kann man da nicht sprechen. Ich will mir jetzt nicht die Finger wundtippen, aber ein paar kleine Hinweise:
1. Tu´dir selber und einem evtl. Nachfolger einen Gefallen und deklariere die Zahlenwerte im Allgemeinen Codeabschnitt als Konstanten und zwar nach dem Muster:
Const Grün = 32768. Du kannst dann im Code Grün anstelle der kryptischen Zahlen verwenden (wenn du in paar Monaten nochmal im Code vorbeisiehst wirst du dir selber dankbar sein.
2. Solche Mehrfachauswahlen macht man nicht mit endlosen If..then..else.." Abfragen, sondern besser mit Select Case. Also z.B.
Select Case
Case Skontorestlaufzeit < 14
Blah Blah
Vieleicht machst du dir auch mal Gedanken über den Event Current.Der tritt ja immer auf, wenn der Datensatzzeiger zu einem anderen (oder auch neuen,oder auch beim öffen des Formulars) wechselt. Wenn da irgenwas hackt, muss es an der zugrundeliegenden Tabelle liegen, bzw. die Art und weise, wie du den Datensatzzeiger setzt. Dazu kenne ich jetzt zuwenig über die Datenbank (auch die Access-Version wäre nützlich).
Gruß: Axel
P.S. Hast du etwa nach jeder If.. then - end if geschrieben.. muss ja wohl. P.P.S.S Nicht böse sein - wir haben ja alle mal angefangen.
Also, ich will dir ja nicht zu nahe treten, aber von einem eleganten Programmierstil kann man da nicht sprechen. Ich will mir jetzt nicht die Finger wundtippen, aber ein paar kleine Hinweise:
1. Tu´dir selber und einem evtl. Nachfolger einen Gefallen und deklariere die Zahlenwerte im Allgemeinen Codeabschnitt als Konstanten und zwar nach dem Muster:
Const Grün = 32768. Du kannst dann im Code Grün anstelle der kryptischen Zahlen verwenden (wenn du in paar Monaten nochmal im Code vorbeisiehst wirst du dir selber dankbar sein.
2. Solche Mehrfachauswahlen macht man nicht mit endlosen If..then..else.." Abfragen, sondern besser mit Select Case. Also z.B.
Select Case
Case Skontorestlaufzeit < 14
Blah Blah
Vieleicht machst du dir auch mal Gedanken über den Event Current.Der tritt ja immer auf, wenn der Datensatzzeiger zu einem anderen (oder auch neuen,oder auch beim öffen des Formulars) wechselt. Wenn da irgenwas hackt, muss es an der zugrundeliegenden Tabelle liegen, bzw. die Art und weise, wie du den Datensatzzeiger setzt. Dazu kenne ich jetzt zuwenig über die Datenbank (auch die Access-Version wäre nützlich).
Gruß: Axel
P.S. Hast du etwa nach jeder If.. then - end if geschrieben.. muss ja wohl. P.P.S.S Nicht böse sein - wir haben ja alle mal angefangen.

