Neuigkeiten:

Ist euer Problem gelöst, dann bitte den Knopf "Thema gelöst" drücken!

Mobiles Hauptmenü

Probleme mit Arbeitstagen bei Datum

Begonnen von Icemann1970, Dezember 26, 2016, 12:26:31

⏪ vorheriges - nächstes ⏩

Icemann1970

Da war ich etwas zu schnell.
Mit der Formel von  MzKlMu und Lachtaube kommt zwar ein Minus(-) aber die Werte stimmen nicht. Mein " For i = -10 To iDiff " macht auch keinen Sinn, da das Datum quasi mit -10 berechnet wird.
Mfg. Udo

MzKlMu

Hallo,
Du musst ja im negativen Fall runter zählen.
Die Schrittweite (Step) von For ist aber im Standard +1 wenn nicht anders angegeben. Da aber die Funktion universell sein soll, muss die Schrittweite ermittelt werden. Die Funktion Sng liefert bei einer negativen Zahl -1 und bei positiven Zahlen 1. Diese Zahl entspricht dann der Schrittweite.
Ändere daher wie folgt:
For i = 0 To iDiff Step Sgn(iDiff)
Und verwende dann den kürzeren Code von Lauchtaube, aber da ist noch ein kleiner Fehler drin. So ist es richtig.
CalcDays = CalcDays * Sgn(iDiff)
Lachtaube hatte statt dem * ein + drin. Es muss aber multipliziert werden.

Zur Kalendertabelle findest Du im Anhang ein kleines Beispiel. Da sind noch mehr Funktionen zu Arbeitstagen enthalten.

Gruß Klaus

Icemann1970

Die Vorzeichen funktionieren jetzt. Problem ist aber wenn nun der Liefertermin mit dem Abfragedatum identisch ist kommt eine Fehlermeldung:
Laufzeitfehler 6 und stürzt ganz böse ab.
Siehe ----->

Public Function CalcDays(dtStart As Date, dtEnd As Date) As Integer
    Dim iDiff As Integer
    Dim i As Integer
    Dim iresult As Integer
    Dim dtTemp As Date

    iDiff = DateDiff("d", dtStart, dtEnd)
    For i = 0 To iDiff Step Sgn(iDiff)
        dtTemp = DateAdd("d", i, dtStart)
        If Weekday(dtTemp, vbMonday) <> 6 And _
           Weekday(dtTemp, vbMonday) <> 7 Then
---->    iresult = iresult + 1
        End If
    Next i
    If iDiff < 0 Then iresult = iresult * -1
    CalcDays = CalcDays * Sgn(iDiff)
    CalcDays = iresult
   
End Function

Habt ihr da eine Lösung?
Danke für die Kalendertabelle, werde ich mich heute Abend mal mit beschäftigen.
Mfg. Udo

MzKlMu

Hallo,
    If iDiff < 0 Then iresult = iresult * -1 '<<<< löschen
    CalcDays = CalcDays * Sgn(iDiff)
    CalcDays = iresult '<<<< löschen
Das ist natürlich so nicht richtig. Entweder If ... oder Sng, aber nicht gleichzeitig.

Für die Fehlernummer 6 gibt es die Lösung Nr 11  :P

Bitte zitiere die Fehlermeldung.
Und benutze für Code die Codetags des Forums.
Gruß Klaus

Lachtaube

#19
Hier kommt die Korrektur. Sgn(0) ergibt 0, was zu einer Endlosschleife führt.Public Function CalcDays(dtStart As Date, dtEnd As Date) As Long
   Dim i As Long, iDiff As Long

   If dtStart = dtEnd Then
      CalcDays = 1
      Exit Function
   End If

   iDiff = dtEnd - dtStart
   For i = 0 To iDiff Step Sgn(iDiff)
      Select Case Weekday(dtStart + i)
         Case vbSunday, vbSaturday
         Case Else
            CalcDays = CalcDays + Sgn(iDiff)
      End Select
   Next
End Function


@MzKlMu,

das Addieren von +1 bzw. -1 innerhalb der For-Next Schleife ist schon beabsichtigt.

PS: persönlich mag ich es übrigens nicht, eine Differenz von 0 (Start = Ende) als eine 1 erscheinen zu lassen.

PPS: wenn ohne Kalendertabelle gearbeitet wird, so sollten doch zumindest gültige Feiertage berücksichtigt werden.
Grüße von der (⌒▽⌒)

MzKlMu

Hallo,
@Lachtaube
Zitatdas Addieren von +1 bzw. -1 innerhalb der For-Next Schleife ist schon beabsichtigt.
Sorry, ich hatte übersehen, dass das in der Schleife ist.
Gruß Klaus

Icemann1970

#21
Hallo zusammen.
Meine DB funktioniert seit gestern nicht mehr richtig. Seit dem laufzeitfehler 6 mit dem Absturtz. Habe Stundenlang versucht wieder zum laufen zu bringen. Habe das Modul gelöscht und wieder vom Anfang unserer Unterhaltung nacheinander eingegeben. Kompremieren und Reparieren durchgeführt. Funktion ist nun bis unserer Unterhaltung von gestern 14:15 Uhr da. ( Keine Ahnung wie ich das hier Einfügen kann).  Könnt Ihr mir weiterhelfen, ich würde gerne die Kalenderfunktion einbringen aber ich habe die Befürchtung dass ein Problem tief innen ist und wenn ich die Kalenderfunktion einfüge dennoch innen schlummert und mir irgendwann um die Ohren fliegt.
Mfg. Udo

MzKlMu

Hallo,
erstelle eine neue, leere DB und importiere alle Objekte der Vorhanden DB.
Wenn diese neue DB immer noch nicht funktioniert, musst Du Dich herantasten und die Objekte (besonders die Formulare) nacheinander importieren und dann probieren.

Ansonsten, kann man keine Ferndiagnose stellen.

Gruß Klaus

Icemann1970

Ich habe jetzt den Fehler gefunden bzw die Ursache. Werde mich morgen melden und die Ursache zeigen.
Gute Nacht Zusammen.
Mfg. Udo

Icemann1970

Irgendein Problem mit Code`s in Verbindung mit Ausdr. in Abfrage verursacht ein Absturz der DB. Werde nach und nach die Code`s und Abfragen eingeben und schauen er da den Fehler anstößt.
Mfg. Udo

Icemann1970

Hallo zusammen. Ich komme nicht weiter.
habe eine kleine Tab gemacht (für Euch) :-).
Bekomme das mit den Negativen Datum nicht hin. Würde mich freuen wenn ihr mir behilflich sein könntet.
Mfg. Udo

MzKlMu

Hallo,
ZitatBekomme das mit den Negativen Datum nicht hin.
Negatives Datum ?
Es gibt kein negatives Datum.

PS:
Die DB kann ich mir nicht ansehen, ich habe nur Access2003 (MDB).
Gruß Klaus

Icemann1970

Habe eine DB in der Geräte repariert / aufgebaut werden. Diese Geräte werden auf Anfrage repariert / aufgebaut. In dem Formular kann man sehen wann welches Gerät fertig sein soll. Wenn dieses Datum überschritten ist würde ich gerne sehen wie viele Tage in Verzug sind.
Habe die DB jetzt in 2003 gespeichert, schau mal ob du die jetzt geöffnet bekommst.
Mfg. Udo

MzKlMu

#28
Hallo,
ZitatWenn dieses Datum überschritten ist würde ich gerne sehen wie viele Tage in Verzug sind.
sorry, aber das ist doch kein negatives Datum. Das sind allenfalls negative Tage.
Ich habe gerade mal nach gesehen. Eigentlich bin ich ziemlich verblüfft. Warum verwendest Du nicht das was man Dir vorschlägt ?
Du hast immer noch die alte Funktion drin die nicht funktioniert.
In #19 steht von Lachtaube eine Funktion die Du direkt verwenden kannst.
Gruß Klaus

Icemann1970

Hallo Klaus,
Würde ich ja gerne machen aber auch da habe ich Probleme. Sorry, ich stehe mir glaube ich selbst im Weg.
Hab mal ein Screenshot gemacht
Mfg. Udo