Access-o-Mania

Access-Forum (Deutsch/German) => Formular => Thema gestartet von: Icemann1970 am Dezember 26, 2016, 12:26:31

Titel: Probleme mit Arbeitstagen bei Datum
Beitrag von: Icemann1970 am Dezember 26, 2016, 12:26:31
Hallo zusammen,
Ich habe bereits die Formel zur anzeige der reinen Arbeitstage im Download-Bereich von Hondo benutzt, die auch einwandfrei in dieser DB funktioniert. Leider bekomme ich das nicht in meiner DB hin selbst wenn ich eine neue DB anlege und das Formular kompl. dort einsetze, langsam habe ich das Gefühl dass es an der Version Access 2016 liegt. Kann mir eine von euch behilflich sein?
Beim Ausführen der Abfrage:
Me.dtAnztage=CalcDays(Nz(Me.dtVon,0),Nz(Me.dtBis))
kommt die Meldung:
Fehler beim Kompilieren: Sub oder Funktion nicht definiert.
Gelb hinterlegt ist dann "CalcDays"
Titel: Re: Probleme mit Arbeitstagen bei Datum
Beitrag von: Lachtaube am Dezember 26, 2016, 12:31:41
Dann schau mal in Hondos Datenbank - dort ist vermutlich ein VBA-Modul vorhanden, das diese Funktion beinhaltet. Ein Kopieren des Moduls sollte dann genügen.
Titel: Re: Probleme mit Arbeitstagen bei Datum
Beitrag von: MzKlMu am Dezember 26, 2016, 12:32:17
Hallo,
hast Du auch in einem allgemeinen Modul die Funktion "CalcDays" angelegt ?
Du kannst nicht einfach die Funktion in einer Abfrage übernehmen, die muss es auch geben.
Titel: Re: Probleme mit Arbeitstagen bei Datum
Beitrag von: Icemann1970 am Dezember 26, 2016, 13:06:43
Genial. Super. Ich bin da jetzt schon sooooo, 1 Woche mit dran. Es Funktioniert.
Wenn Ihr mir jetzt noch mit einem anderen Problem hefen könntet.....
Ich habe eine Sehr große Datenbank (do it yourself) erstellt. Riesen groß (für meine Verhältnisse) mit 16 Tabellen,45 Formularen, 34 Abfragen,13 Berichte. Ich bin leihe, alles selber rausgesucht und keine Ahnung von Programmieren deshalb bin ich jetzt auch schon im 2 Jahr daran ABER es funktioniert alles.
Jetzt mein Problem: Ich würde gerne die Ansicht von einem Formular als PDF speichern oder Drucken. Ja, dazu sollte man eigentlich Berichte nehmen aber..... Problem ist dass ich mehrere Seiten (Seitenränder) ausgedruckt bekomme. Aber nur ein bestimmten Datensatz, was richtig ist. 
Titel: Re: Probleme mit Arbeitstagen bei Datum
Beitrag von: MzKlMu am Dezember 26, 2016, 13:27:41
Hallo,
bitte zukünftig beachten: Neue Frage > neues Thema.

Zum Drucken nimmt man Berichte, was ist jetzt Dein Problem dabei ?

PS:
Wenn der Laie sich ein Buch leiht, kann es danach sein, dass sein Wissen immer noch laienhaft ist.  ;D
Titel: Re: Probleme mit Arbeitstagen bei Datum
Beitrag von: Lachtaube am Dezember 26, 2016, 14:35:34
Wenn Du das als PDF zu druckende Formular kopierst (Taste Strg-C) wirst Du beim Einfügen (Taste Strg-V) gefragt, unter was Du die Kopie speichern willst. Wähle hier Bericht und benenne das Ding ordentlich. In der Entwurfsansicht kannst Du dann diesen Bericht auf Deine Seitenanforderungen richtig einstellen. Würdest Du das mit dem Formular machen, wird das Bildschirmlayout gestört oder die Seite passt nicht richtig zum Papierlayout. Und dann schau Dir die OutputTo-Methode des DoCmd-Objekts in Deiner Access-Hilfe an - den Befehl gibt es wohl auch als Makro.Damit kann die PDF erstellt werden.
Titel: Re: Probleme mit Arbeitstagen bei Datum
Beitrag von: Icemann1970 am Dezember 26, 2016, 16:41:15
Sorry, macht ja auch Sinn ein neues Thema. Werde ich machen.
Bleibe ich mal weiter bei meinem Problem.
In meinem Formular funktioniert die Datumsfunktion, jetzt das nächste Problem. Zur Info:(Me.dtVon = Datum(), (Text149 = Liefertermin)
Wenn ich die vba
Me.dtAnztage = CalcDays(Nz(Me.dtVon, 0), Nz(Me.Text149))
eingebe ist alles gut wenn ich in Einzelnes Formular habe, ich brauche dies aber im Endlosformular, welches über eine Abfrage " Objekt Abfrage Bühne" läuft. ( ja, Bezeichnungen sind nicht optimal). Könnt Ihr mir da auch weiterhelfen?
Titel: Re: Probleme mit Arbeitstagen bei Datum
Beitrag von: MzKlMu am Dezember 26, 2016, 16:51:10
Hallo,
Du musst die Funktion in einer Abfrage aufrufen, nicht über VBA.
Anztage: CalcDays(Nz(Von, 0), Nz(Bis, 0))
Die Formularbezüge (Me.) müssen dann entfallen und für VON und BIS müssen die Tabellenfelder verwendet werden.
Die Nz Funktion macht hier meiner Meinung nach keinen Sinn. Du rechnest mit 0 was zu unsinnigen Ergebnissen führt. Du musst dafür sorgen, dass VON und BIS immer gefüllt ist.
Titel: Re: Probleme mit Arbeitstagen bei Datum
Beitrag von: Icemann1970 am Dezember 26, 2016, 16:58:57
Okay, soll heißen dass ich kein Ungebundenes Feld nehmen kann. Also muss ich ein Feld anlegen und da die Funktion abrufen?
Titel: Re: Probleme mit Arbeitstagen bei Datum
Beitrag von: MzKlMu am Dezember 26, 2016, 17:47:20
Hallo,
nein, Du musst wie gesagt die Funktion in einer Abfrage aufrufen. Die Abfrage erzeugt ein berechnetes Feld (Anztage). An dieses Feld wird das Formularfeld gebunden.
Titel: Re: Probleme mit Arbeitstagen bei Datum
Beitrag von: Icemann1970 am Dezember 26, 2016, 21:17:02
Vielen Dank an ALLE, die mir bei dem Problem geholfen haben. Es Funktioniert. Irgendwie habe ich das Modul nicht gespeichert dadurch konnte ich keine Funktion erstellen.
Titel: Re: Probleme mit Arbeitstagen bei Datum
Beitrag von: Icemann1970 am Dezember 27, 2016, 14:14:05
Juhuuu, da is er wieder.
Wie bekomme ich negative Arbeitstage hin. Also wie viele Arbeitstage bin ich über den festgelegten wert?
Im Modul habe ich von " For i = 0 To iDiff    auf    For i = -10 To iDiff "geändert aber das Ergebnis zeigt mir zwar die richtige Zahl (bis 10 Tage drüber) an aber kein (-)

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       
        dtTemp = DateAdd("d", i, dtStart)
        If Weekday(dtTemp, vbMonday) <> 6 And _
           Weekday(dtTemp, vbMonday) <> 7 Then
            iresult = iresult + 1
        End If
    Next i
    CalcDays = iresult
End Function



Titel: Re: Probleme mit Arbeitstagen bei Datum
Beitrag von: Lachtaube am Dezember 27, 2016, 15:17:35
So gibt die Funktion auch negative Werte aus.Public Function CalcDays(dtStart As Date, dtEnd As Date) As Long
   Dim i As Long, iDiff As Long

   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
Titel: Re: Probleme mit Arbeitstagen bei Datum
Beitrag von: MzKlMu am Dezember 27, 2016, 15:19:38
Hallo,
prüfe einfach ob iDiff <0 und multipliziere wenn ja mit -1
.
.
.

    Next i
    If iDiff < 0 Then iresult = iresult * -1
    CalcDays = iresult
End Function


Ein solches Vorhaben lässt viel eleganter und einfacher mit einer Kalendertabelle erledigen. Da können auch gleich die Feiertage (und sonstige freie Tage) mit verarbeitet werden. Der komplette Code reduziert sich auf eine Zeile.
Titel: Re: Probleme mit Arbeitstagen bei Datum
Beitrag von: Icemann1970 am Dezember 27, 2016, 15:51:51
Man, da bekomme ich es ja mit der Angst zu tun. Ihr Seid Spitze. Klaus, eine Zeile und du hast mich glücklich gemacht.
Wie geht das mit der Kalendertabelle, im Download Bereich habe ich eine gefunden MS97 kann ich nicht öffnen arbeite mit 2016.
Titel: Re: Probleme mit Arbeitstagen bei Datum
Beitrag von: Icemann1970 am Dezember 27, 2016, 17:09:59
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.
Titel: Re: Probleme mit Arbeitstagen bei Datum
Beitrag von: MzKlMu am Dezember 27, 2016, 17:36:21
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.

Titel: Re: Probleme mit Arbeitstagen bei Datum
Beitrag von: Icemann1970 am Dezember 27, 2016, 19:59:02
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.
Titel: Re: Probleme mit Arbeitstagen bei Datum
Beitrag von: MzKlMu am Dezember 27, 2016, 20:10:12
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.
Titel: Re: Probleme mit Arbeitstagen bei Datum
Beitrag von: Lachtaube am Dezember 28, 2016, 02:16: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.
Titel: Re: Probleme mit Arbeitstagen bei Datum
Beitrag von: MzKlMu am Dezember 28, 2016, 09:05:25
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.
Titel: Re: Probleme mit Arbeitstagen bei Datum
Beitrag von: Icemann1970 am Dezember 28, 2016, 10:00:31
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.
Titel: Re: Probleme mit Arbeitstagen bei Datum
Beitrag von: MzKlMu am Dezember 28, 2016, 11:35:53
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.

Titel: Re: Probleme mit Arbeitstagen bei Datum
Beitrag von: Icemann1970 am Dezember 28, 2016, 22:46:28
Ich habe jetzt den Fehler gefunden bzw die Ursache. Werde mich morgen melden und die Ursache zeigen.
Gute Nacht Zusammen.
Titel: Re: Probleme mit Arbeitstagen bei Datum
Beitrag von: Icemann1970 am Dezember 29, 2016, 19:47:18
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.
Titel: Re: Probleme mit Arbeitstagen bei Datum
Beitrag von: Icemann1970 am Dezember 30, 2016, 18:24:02
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.
Titel: Re: Probleme mit Arbeitstagen bei Datum
Beitrag von: MzKlMu am Dezember 30, 2016, 18:31:56
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).
Titel: Re: Probleme mit Arbeitstagen bei Datum
Beitrag von: Icemann1970 am Dezember 30, 2016, 18:45:55
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.
Titel: Re: Probleme mit Arbeitstagen bei Datum
Beitrag von: MzKlMu am Dezember 30, 2016, 19:01:45
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.
Titel: Re: Probleme mit Arbeitstagen bei Datum
Beitrag von: Icemann1970 am Dezember 30, 2016, 22:25:38
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
Titel: Re: Probleme mit Arbeitstagen bei Datum
Beitrag von: Lachtaube am Dezember 30, 2016, 23:03:42
Ich hab Dir die Funktion in die DB eingebaut.
Titel: Re: Probleme mit Arbeitstagen bei Datum
Beitrag von: MzKlMu am Dezember 30, 2016, 23:24:48
@Lachtaube
Ich glaube die Funktion hat noch einen kleinen Fehler. Ausgehend vom 30.12.2016 als aktuelles Datum wird bei 29.12. -2 gezeigt und bei gleichem Datum 1, da sehe ich eine -1 und eine 0. Wenn das Gerät am Tage des Termins geliefert wird ist der Verzug 0 und wenn es gestern (29.12.) hätte geliefert werden sollen ist der Verzug -1
Ich denke die For Schleife muss Vorzeichenabhängig bei 1 bzw. -1 beginnen und nicht bei 0, da könnte man auch Sng(iDiff) verwenden.
Ich würde daher folgende Änderung vorschlagen:
Public Function CalcDays(dtStart As Date, dtEnd As Date) As Long
   Dim i As Long, iDiff As Long
   If dtStart = dtEnd Then
      CalcDays = 0
      Exit Function
   End If
   iDiff = dtEnd - dtStart
   For i = Sgn(iDiff) To iDiff Step Sgn(iDiff)
      Select Case Weekday(dtStart + i)
         Case vbSunday, vbSaturday
         Case Else
            CalcDays = CalcDays + Sgn(iDiff)
      End Select
   Next
End Function
Titel: Re: Probleme mit Arbeitstagen bei Datum
Beitrag von: Icemann1970 am Dezember 30, 2016, 23:41:00
Hallo Ihr zwei, danke für Eure Hilfe.
Wenn ich den Code ändere (Alten löschen neuen einfügen) bekomme ich immer den Fehler :
Fehler beim Kompilieren.
Darum habe ich ja die Probleme. Hatte in den ganzen Unterhaltungen von uns eure Vorschläge und die in den Downloads versucht einzusetzen ..... immer fehler.
Die Änderung von dir Klaus ist das Gleiche.
Titel: Re: Probleme mit Arbeitstagen bei Datum
Beitrag von: Beaker s.a. am Dezember 31, 2016, 01:17:58
Hallo Udo,
ZitatFehler beim Kompilieren.
Und? Welche Zeile wird dir angezeigt wenn du auf "Debuggen" klickst?
Fehlernummer und -Beschreibung! ?
gruss ekkehard
Titel: Re: Probleme mit Arbeitstagen bei Datum
Beitrag von: Lachtaube am Dezember 31, 2016, 01:50:15
Der Fehler scheint ursprünglich vom Autor (nicht von mir) so gewollt zu sein, was mir peresönlich auch nicht gefällt. Ich denke, der Udo soll sich dazu äußern, wie er die Datumsangaben interpretiert haben will.
Titel: Re: Probleme mit Arbeitstagen bei Datum
Beitrag von: Icemann1970 am Dezember 31, 2016, 10:59:02
Vielen Dank für Eure Hilfe.
Kein Ahnung warum ich das nicht kopieren und einfügen kann. Habe die von Dir (Lachtaube)  geänderte db genommen kopiert und eingefügt, dass funktioniert aber sobald ich die Code `s aus dem Forum nehme oder sie 1:1 abschreibe funktioniert es nicht.  (Bild im Anhang)
Vielen Vielen Dank nochmal an alle !!!.
Werde in den nächsten Tagen (dieses Jahr nicht mehr) ein neues Thema öffnen also bis bald und Allen einen guten Rutsch ins Jahr 2017.
Titel: Re: Probleme mit Arbeitstagen bei Datum
Beitrag von: Icemann1970 am Dezember 31, 2016, 11:04:37
Anhang vergessen, da iss er
Titel: Re: Probleme mit Arbeitstagen bei Datum
Beitrag von: MzKlMu am Dezember 31, 2016, 11:40:44
Hallo,
gehe mal im VBA Editor auf Verweise und und schau mal ob es da einen Punkt gib "Nicht vorhanden", den Haken davor machst Du dann mal weg.
DB schließen, erneut probieren.
Titel: Re: Probleme mit Arbeitstagen bei Datum
Beitrag von: Icemann1970 am Dezember 31, 2016, 17:39:14
Hey Klaus, Habe nachgeschaut aber keinen Punkt " Nicht vorhanden" oder " Unavailable" gefunden.