Neuigkeiten:

Ist euer Problem gelöst, dann bitte den Knopf "Thema gelöst" 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