aximand
Goto Top

Access 2010 bedingte Formatierung in VBA eines Formulars

In einem Formular werden mir bsplw. 3 Datensätze angezeigt. Unter anderem ist das Feld "Liefertag" pro Tupel vorhanden.
Wie kann ich nun beim Form_Load erreichen, dass das Feld "Liefertag" in Abhängigkeit Zeitdifferenz zum Tagesdatum (datediff("d", Liefertermin.Value, Date) eingefärbt wird? Prinzipiell funktioniert der Code zum einfärben,
ABER: Es scheint mir so, als würde lediglich die erste Zeile geprüft und dann das Feld in den Folgezeilen ebenso mit der Farbe aus Zeile 1 eingefärbt.

Kann mir das jemand 'erklären' oder näherbringen. In Excel ist das relativ einfach, ich habe mich jetzt aber eben auch mal an Access herangewagt...

Private Sub Form_Load()

Dim FC As FormatCondition

With Form_offeneWE.Liefertermin
    .FormatConditions.Delete
   
    Set FC = .FormatConditions.Add(acExpression, acLessThanOrEqual, datediff("d", Liefertermin.Value, Date), 2)  
    FC.BackColor = RGB(255, 48, 48)
    Set FC = .FormatConditions.Add(acExpression, acGreaterThan, datediff("d", Liefertermin.Value, Date), 4)  
    FC.BackColor = RGB(255, 0, 0)

End With
End Sub

Content-ID: 384069

Url: https://administrator.de/contentid/384069

Ausgedruckt am: 25.11.2024 um 10:11 Uhr

colinardo
Lösung colinardo 22.08.2018 aktualisiert um 11:32:06 Uhr
Goto Top
Servus,
kein Problem.
Private Sub Form_Load()
    Dim fc As FormatCondition
    With Liefertermin
        .FormatConditions.Delete
        With .FormatConditions.Add(acExpression, Expression1:="DateDiff(""d"",[Liefertermin],Date()) <= 2")  
            .BackColor = RGB(255, 48, 48)
            .Enabled = True
        End With
        With .FormatConditions.Add(acExpression, Expression1:="DateDiff(""d"",[Liefertermin],Date()) > 4")  
            .BackColor = RGB(255, 0, 0)
            .Enabled = True
        End With
    End With
End Sub
Grüße Uwe
Aximand
Aximand 22.08.2018 um 11:31:16 Uhr
Goto Top
Super, Daaaanke Uwe.

Verstehe ich noch nicht so ganz im Detail (das ist meinen rudimentären VBA Kenntnissen geschulder), aber immerhin funktioniert es!

Vermutlich habe ich noch hunderte andere Fragen weil ich die Lösungen nicht über die Websuche oder hier finde ^^
colinardo
colinardo 22.08.2018 aktualisiert um 11:41:35 Uhr
Goto Top
Zitat von @Aximand:
Verstehe ich noch nicht so ganz im Detail (das ist meinen rudimentären VBA Kenntnissen geschulder), aber immerhin funktioniert es!
Bei einer Expression findet der Vergleich in der Expression statt nicht mit dem Expression2 Parameter und das ganze muss ein String sein, damit der richtig in der Expression landet und nicht schon ausgewertet dort landet, genau das was du gerade falsch machst, du benutzt die DateAdd Funktion direkt und diese liefert als Expression nur das Ergebnis eines Vergleichs eines aktuellen Wertes der Tabelle zurück. Expression2 wird nur verwendet wenn als Vergleich "Between" etc. genutzt wird, also zwei Werte benötigt werden.

Viel fieser ist es wenn du die Formatcondition direkt in der Oberfläche eintippeln musst, da ist dann alles einzudeutschen inkl. Funktionen und sogar "Parameter" wie anstatt "d" dann "t", da bin ich früher auch immer drüber gestolpert.