Supportnet / Forum / Datenbanken
Access setzt Schriftfarbe automatisch auf rot
Frage
Werte Fachwissende,
die folgende Funktion dient der Einfärbung von innerhalb der Prozedur errechneten Prozentwerten je nachdem ob sie positve oder negativ sind.
If Res < 0 Then
Me.DPV_Comp_2004.ForeColor = RGB(250, 0, 0)
Me.DPV_Comp_2004 = Res & "%"
Else
If Res = "0" Then
Me.DPV_Comp_2004.ForeColor = RGB(0, 0, 170)
Me.DPV_Comp_2004 = Res & "%"
Else
Me.DPV_Comp_2004.ForeColor = RGB(0, 170, 0)
Me.DPV_Comp_2004 = "+" & Res & "%"
End If
End If
End If
Das Problem ist nun sobald ich der Prozentzahl durch ein künstliches "+" & den Positivcharakter der Zahl nocheinmal unterstützen möchte, ändert Access die Textfarbe automatisch in rot um. Lässt man den Präfix "+" & weg oder ersetzt ihn durch einen Zahlen- oder Buchstabenkette funktioniert die Funktion einwandfrei. Die merkwürdige Roteinfärbung tritt nur bei Zeichen wie +,-,*,# usw auf ...
Die Prozentzahl soll sofern sie positiv ist grün und als +39% erscheinen. Sollte der Prozentwert negativ sein wird er rot gefärbt und bereits automatisch mit negativem Vorzeichen als -39% ausgegeben. Der Wert wird blau gefärbt und als 0% dargestellt.
Fazit: Die Große Frage ist warum wird der positive Wert wenn ihm ein Zeichen vorangestellt wird plötzlich rot und nicht grün. Ich hoffe einer von euch kann mir hier weiterhelfen.
Liebe Grüße,
Alex
Antwort 1 von Proggi
du solltest nicht mit > oder < einen String vergleichen, der Effekt kann wie beschrieben nach hinten los gehen.
im normalfall würdest du das mit dem "+" weglassen da das überbetont.
vergleiche einen String und benutze Select Case - deine If-abfrage ist unübersichtlich.
im normalfall würdest du das mit dem "+" weglassen da das überbetont.
vergleiche einen String und benutze Select Case - deine If-abfrage ist unübersichtlich.
Select Case Left(Res, 1)
Case "-"
Me.DPV_Comp_2004.ForeColor = RGB(250, 0, 0)
Me.DPV_Comp_2004 = Res & "%"
Case "0"
Me.DPV_Comp_2004.ForeColor = RGB(0, 0, 170)
Me.DPV_Comp_2004 = Res & "%"
Case Else
Me.DPV_Comp_2004.ForeColor = RGB(0, 170, 0)
Me.DPV_Comp_2004 = "+" & Res & "%"
End Select
Antwort 2 von Mondoban
Vielen Dank Proggi für die rasche Antwort und die Verbesserung meiner If-Abfrage ...
Jedoch gibt mir Access im Case Else immernoch den +39% - Wert in Rot und nicht in grün aus. Sobald ich das Pluszeichen mit "+" & davor setzt färbt sich der Werte im Textfeld automatisch rot ungeachtet der erzwungenen Textfarbe in der Funktion.
Also dass mach irgendwie keinen Sinn finde ich ... Zunächst werde ich die positiven einfach nur grün anzeigen lassen ohne Pluszeichen. Es würde mich aber trotzdem interessieren warum Access jeden Wert rot färbt wenn man künstlich eine Zeichen davor setzt.
Bitte klärt dieses Mysterium auf.
Thx,
Alex
Jedoch gibt mir Access im Case Else immernoch den +39% - Wert in Rot und nicht in grün aus. Sobald ich das Pluszeichen mit "+" & davor setzt färbt sich der Werte im Textfeld automatisch rot ungeachtet der erzwungenen Textfarbe in der Funktion.
Also dass mach irgendwie keinen Sinn finde ich ... Zunächst werde ich die positiven einfach nur grün anzeigen lassen ohne Pluszeichen. Es würde mich aber trotzdem interessieren warum Access jeden Wert rot färbt wenn man künstlich eine Zeichen davor setzt.
Bitte klärt dieses Mysterium auf.
Thx,
Alex
Antwort 3 von Proggi
Mal frage - ist das ein Endlosformular?
Antwort 4 von Teddy7
Hat proggi doch gesagt.
Durch die Zusammenstellung "+" & Res & "%"
ist das Feld keine Zahl mehr sondern ein Text - und der wird halt bei < Abfrage hexadecimal aufgedröselt. D.h. wahrscheinlich ist der hexadecimale Wert von + kleiner als der von 0.
Lösung: mach 2 Felder. Die Zahl kannst Du unsichtbar stellen und ein Textfeld füllst und formatierst Du abhängig vom Zahlenfeld.
Gruß
Teddy
Durch die Zusammenstellung "+" & Res & "%"
ist das Feld keine Zahl mehr sondern ein Text - und der wird halt bei < Abfrage hexadecimal aufgedröselt. D.h. wahrscheinlich ist der hexadecimale Wert von + kleiner als der von 0.
Lösung: mach 2 Felder. Die Zahl kannst Du unsichtbar stellen und ein Textfeld füllst und formatierst Du abhängig vom Zahlenfeld.
Gruß
Teddy
Antwort 5 von erik
Hallo Alex,
statt des VBA-Codes würde ich dir empfehlen, ein benutzerdefiniertes Format in die Format-Eigenschaft des betroffenen Formularfeldes einzufügen:
Nachdem was ich gelesen habe, müsste dieses Format in jeder Hinsicht genau das machen, was du brauchst.
Wie das im Detail funktioniert, verrät die Online-Hilfe. Drücke nach Klick in die Format-Eigenschaft die F1-Taste und scrolle runter zu "Benutzerdefinierte Formate"
Viele Grüße
erik
statt des VBA-Codes würde ich dir empfehlen, ein benutzerdefiniertes Format in die Format-Eigenschaft des betroffenen Formularfeldes einzufügen:
+0%[Grün];-0%[Rot];0%[Blau];[Schwarz]
Nachdem was ich gelesen habe, müsste dieses Format in jeder Hinsicht genau das machen, was du brauchst.
Wie das im Detail funktioniert, verrät die Online-Hilfe. Drücke nach Klick in die Format-Eigenschaft die F1-Taste und scrolle runter zu "Benutzerdefinierte Formate"
Viele Grüße
erik