Hallo zusammen,
ich hoffe mir kann jemand weiterhelfen. Und zwar habe ich aktuell ein kleines Problem mit meinen Abfragen.
Und zwar habe ich drei Abfragen gebastelt, welche mir die Datensätze mit Datum + 1 / Datum + 2 und Datum + 3 anzeigen sollen. Allerdings möchte ich das Abfrageergebnis auf Wochentage beschränken und nutze aktuell die folgenden "Codes"
Für die Abfrage Datum +1:
Wenn(Wochentag(Datum()+1;2)<6;Datum()+1;Datum()+3-Wochentag(Datum()+1;2))
Funktioniert von Montag bis Donnerstag gut, Freitags bekomme ich ein falsches Ergebnis
Für die Abfrage Datum +2:
Wenn(Wochentag(Datum()+2;2)<6;Datum()+2;Wenn(Wochentag(Datum()+2;2)=6;Datum()+4;Datum()+3))
Für die Abfrage Datum +3:
Wenn(Wochentag(Datum()+3;2)<6;Datum()+3;Wenn(Wochentag(Datum()+3;2)=7;Datum()+5;Datum()+4))
Den Code hatte ich Donnerstags angepasst, weil ich ein falsches Ergebnis erhalten hatte. Dann hat es wieder funktioniert und Freitags war das Ergebnis erneut falsch.
Kann mir jemand sagen wie ich die Abfrage anpassen muss, um an allen Tagen ein richtiges Ergebnis zu erhalten?
Musst du ab Montag zählen, nicht schon ab Sonntag; - FirstDayOfWeek.
Hallo
die beste Lösung wäre eine Kalendertabelle die alle Tage eines ausreichenden Zeitraums (können 20 Jahre und mehr sein) umfasst.
In diese Tabelle kommt auch ein Feld für die Wochentagsnummer.
Feiertage könnte man da auch noch integrieren.
Eine einfache Abfrage mit <6 und >= Datum() sowie TOP 3 zeigt nur die nächsten 3 Arbeitstage.
Zitat von: Beaker s.a. am April 03, 2023, 11:18:58Musst du ab Montag zählen, nicht schon ab Sonntag; - FirstDayOfWeek.
Danke, mein Verständnis ist, dass sich die Formel auf den Montag bezogen hat.
Wenn(Wochentag(Datum()+1;2)<6
Der Rückgabetyp 2 bedeutet, dass Montag als 1 und Sonntag als 7 gezählt werden. Also eigentlich genau wie gewünscht.
Oder liegt an dieser Stelle den Fehler?
Habe jetzt auch mal versucht, "<6" durch "<=5" zu ersetzen. Wobei das vermutlich keinen Unterschied macht.
Ob das zum richtigen Ergebnis führt, sehe ich aber erst am Donnerstag und Freitag. Für heute würde es passen.
?WeekDay(Date,vbSunday)
2 '= Montag; Freitag = 6, kann nicht < sein
?WeekDay(Date,vbMonday)
1 '= Montag; Freitag = 5, ist < 6
Hallo,
@Ekehard
die 2 in der Formel ist die VBA Konstante für vbMonday. In Abfragen (SQL) wird vbMonday nicht erkennt, da muss die 2 genommen werden.
Über die Logik habe ich aber nicht weiter nachgedacht, da ich die Kalendertabelle bevorzugen würde.
@dobby110 Kannst Du mal etwas zu den 3 Datumswerten sagen, sollen die in Feldern gespeichert werden ?
Was haben die 3 Datumsfelder für eine Bedeutung.
im Grunde handelt es sich nur um eine 3-Tage-Vorschau. Die Vorgänge werden immer auf ein Wiedervorlage-Datum gelegt und die Kollegen haben sich gewünscht, eine kleine Vorschau einzubauen.
Dazu habe ich drei Abfragen (Datum +1 / +2 / +3) generiert. Die Anzeige erfolgt dann in einem Formular, in dem ich drei Unterformulare eingebaut habe. In jedem Unterformular werden die einzelnen Abfrageergebnise angezeigt. Kann mal ein Screenshot anfügen, wie das aussieht. Heute funktioniert es, aber sobald ein Wochenende "im Weg steht" bekomme ich ein falsches Ergebnis.
Im Grunde will ich einfach nur erreichen, dass die Vorschau wie gewünscht funktioniert, so dass die Kollegen auf einen Blick sehen können, was die nächsten drei Tage ansteht.
Zitat... im Grunde handelt es sich nur um eine 3-Tage-Vorschau. Die Vorgänge werden immer auf ein Wiedervorlage-Datum gelegt
Da darf man wohl unterstellen, dass solche Wiedervorlagen nicht auf Tage des Wochenendes gelegt wurden, womit Wochenenden nicht zwingend nachfolgend aussortiert werden müssen.
Wenn man unterstellt, dass ein Unterformular mit Sortierung nach Wiedervorlage genügt, kann man sich über TOP 3 die nächsten drei Tage holen:
Dim sFilter As String
sFilter = "WV IN (SELECT TOP 3 X.WV FROM (SELECT DISTINCT WV FROM tblVorgang) AS X WHERE X.WV > Date() ORDER BY X.WV)"
Vielen Dank für die Hilfe.
Ich versuche es zunächst mit diesem angepassten "Code"
Wenn(Wochentag(Datum();2)<=2;Datum()+3;Wenn(Wochentag(Datum();2<=5;Datum()+5;Wenn(Wochentag(Datum();2)=6;Datum()+4;Datum()+3)))
Wenn das nicht funktioniert, werde ich den Ansatz mit der Kalendertabelle verfolgen.
Bei den schwerwiegenden Überlegungen und Versuchen solltest Du vielleicht unmittelbar einfließen lassen, ob womöglich neben Wochenenden auch Feiertage in der Anzeige auszuschließen wären.