Neuigkeiten:

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

Mobiles Hauptmenü

VBA Funktion Status Automatisch ändert

Begonnen von mmaatouk, Juli 24, 2015, 11:46:34

⏪ vorheriges - nächstes ⏩

mmaatouk

Hallo Und Guten tag
Ich habe in einem Formulare die Feld Status , die von 1 bis 5 bewertet
und muss mit der zeit verändert automatisch
zb : wenn von heute bis ende des Garantie nur 3 Monate noch gibt dann von Status 1 zu 2 ändern
und wenn Garantie abgelaufen ist dann von 2 zu 3 ändert
mit 4 und 5  wir nichts verändert

Viele Grüße

DF6GL

Hallo,

schreibe eine Funktion ("CalcStatus()"), die den Status aktuell berechnet und zurück liefert  und rufe diese Funktion im Steuerelementinhalt eines Form-Textfeldes auf:

=CalcStatus()


Dazu  muss aber die Bedeutung ALLER 5 Status-Werte bekannt und berechenbar  sein.
Viele Grüße vom Bodensee
Franz, DF6GL

Hilfestellung:  http://www.access-o-mania.de/forum/index.php?topic=6969.msg118738#msg118738

Links und Tipps:
1.   http://v.hdm-stuttgart.de/~riekert/lehre/db-kelz/
1a. http://www.tinohempel.de/info/info/datenbank/normalisierung.htm
1b. https://support.office.com/de-de/article/Grundlagen-des-Datenbankentwurfs-eb2159cf-1e30-401a-8084-bd4f9c9ca1f5#bmterms
2.   http://www.donkarl.com
3.   https://web.archive.org/web/20201201233522/http://www.dbwiki.net/
4.   http://www.access-tutorial.de/
5.   http://www.tty1.net/smart-questions_de.htm
6.   http://access.joposol.com/accept

Last but not least:   < F1 > für Hilfe
;) Learning by doing not by spoon-feed ;)

Tipp: Find and Replace for Access

mmaatouk

ich habe diese Funktion geschrieben ist das Richtig
wie kann aufrufen und ganze spalte automatisch anwenden
Public Function StatusBestimmen(Nächste_Kal As Variant) As Integer


Dim DifferenzInMonat As Integer
Dim Statusnr As Integer
Dim diDifferenzInyear As Integer

If IsNull(Nächste_Kal) Then Exit Function

    DifferenzInyear = DateDiff("y", Date, Nächste_Kal)
    If DifferenzInyear < 1 Then
    DifferenzInMonat = DateDiff("m", Date, Nächste_Kal)
    If DifferenzInMonat >= 3 And Not IsNull(Me!Status) Then
    StatusBestimmen = 1
    End If
    If DifferenzInMonat < 3 And DifferenzInMonat > 1 And Not IsNull(Me.Status) Then
    StatusBestimmen = 2
    End If
    If DifferenzInMonat < 0 And Not IsNull(Me!Status) Or Me.Status = 3 Then
    StatusBestimmen = 3
    End If
    If DifferenzInMonat < 0 And Not IsNull(Me!Status) And Me.Status = 4 Then
    StatusBestimmen = 4
    End If
    If DifferenzInMonat < 0 And Not IsNull(Me!Status) And Me.Status = 5 Then
    StatusBestimmen = 5
    End If
   
   End If


End Function

DF6GL

Hallo,

so war das nicht gemeint...  Me!Status darf in der Funktion nicht vorkommen, der Status-Wert soll ja berechnet werden.


Deshalb meine vorherige Anmerkung, dass die Bedeutung aller Status-Werte definiert sein muss.

Z.B . Woher kommt Statuswert 3 oder 4 und was bedeutet der?  Ein Feld "Status" in irgendeiner Tabelle ist überflüssig/falsch.

Viele Grüße vom Bodensee
Franz, DF6GL

Hilfestellung:  http://www.access-o-mania.de/forum/index.php?topic=6969.msg118738#msg118738

Links und Tipps:
1.   http://v.hdm-stuttgart.de/~riekert/lehre/db-kelz/
1a. http://www.tinohempel.de/info/info/datenbank/normalisierung.htm
1b. https://support.office.com/de-de/article/Grundlagen-des-Datenbankentwurfs-eb2159cf-1e30-401a-8084-bd4f9c9ca1f5#bmterms
2.   http://www.donkarl.com
3.   https://web.archive.org/web/20201201233522/http://www.dbwiki.net/
4.   http://www.access-tutorial.de/
5.   http://www.tty1.net/smart-questions_de.htm
6.   http://access.joposol.com/accept

Last but not least:   < F1 > für Hilfe
;) Learning by doing not by spoon-feed ;)

Tipp: Find and Replace for Access

mmaatouk

Können SIe mal Bitte ein beispiel Programm schreiben damit ich verstehe was Sie meinen
Danke

DF6GL

Hallo,



Public Function StatusBestimmen(Nächste_Kal As Date) As Integer


Dim DifferenzInMonat As Integer
Dim Statusnr As Integer
Dim diDifferenzInyear As Integer

If IsNull(Nächste_Kal) Then Exit Function

    DifferenzInyear = DateDiff("y", Date, Nächste_Kal)

    If DifferenzInyear < 1 Then
         DifferenzInMonat = DateDiff("m", Date, Nächste_Kal)
 

         If DifferenzInMonat >= 3  Then
             StatusBestimmen = 1
         End If


          If DifferenzInMonat < 3 And DifferenzInMonat > 1  Then
            StatusBestimmen = 2
         End If


         If DifferenzInMonat < 0  Then
             StatusBestimmen = 3
         End If


         If <<ein bestimmter anderer Zustand der Zeitverhältnisse>>  Then
             StatusBestimmen = 4
         End If

         If <<ein bestimmter weiterer anderer Zustand der Zeitverhältnisse>> Then
             StatusBestimmen = 5
         End If
   
    End If


End Function



Im Steuerelementinhalt eines Form-Textfeldes:

=StatusBestimmen()
Viele Grüße vom Bodensee
Franz, DF6GL

Hilfestellung:  http://www.access-o-mania.de/forum/index.php?topic=6969.msg118738#msg118738

Links und Tipps:
1.   http://v.hdm-stuttgart.de/~riekert/lehre/db-kelz/
1a. http://www.tinohempel.de/info/info/datenbank/normalisierung.htm
1b. https://support.office.com/de-de/article/Grundlagen-des-Datenbankentwurfs-eb2159cf-1e30-401a-8084-bd4f9c9ca1f5#bmterms
2.   http://www.donkarl.com
3.   https://web.archive.org/web/20201201233522/http://www.dbwiki.net/
4.   http://www.access-tutorial.de/
5.   http://www.tty1.net/smart-questions_de.htm
6.   http://access.joposol.com/accept

Last but not least:   < F1 > für Hilfe
;) Learning by doing not by spoon-feed ;)

Tipp: Find and Replace for Access

mmaatouk

Danke Ihnen hat mich gut geholfen
aber bei 4 und 5 es gibt kein Bedingung die sind schon 4 und 5 bewertet und die müssen nicht ändern

mmaatouk

#7
=StatusBestimmen([Nächste Kal]) Und Wenn([Status]=4;4;5)
ich habe dieses Ausdruck geschrieben und möchte damit sagen
ruf die Funktion StatusBestimmen auf von 1 bis 3
und wenn es 4 dann bleibt 4 und wenn 5 ist dann bleibt 5
aber es gibt Fehler
bitte helfen
Danke

MaggieMay

Versuche es mal hiermit:
=Wenn([Status] < 4;StatusBestimmen([Nächste Kal]);[Status])
Freundliche Grüße
MaggieMay

mmaatouk


MaggieMay

Das Textfeld selbst darf dabei nicht "Status" heißen.

Oder wie bzw. wo hast du den Code eingesetzt?
Freundliche Grüße
MaggieMay

mmaatouk