Hallo Experten!
Ich versuche eine Dateneingabe zu erstellen, bei der in einem Formular ein Anfangsdatum und ein Enddatum sowie einige Werte eingetragen werden. Nun möchte ich mir die Differenz der beiden Datumswerte als Anzahl Wochen ausgeben lassen.
Für jede dazwischen liegende KW möchte ich einen Datensatz erzeugen und die KW abspeichern. Aber: Es will mir nicht gelingen!! Das habe ich bisher gebastelt:
Sub DatumDifferenz()
Dim DatumStart As Date
Dim DatumEnde As Date
Dim I As Integer
Dim J As Integer
Dim rst As DAO.Recordset
Dim db As DAO.Database
DatumStart = Forms!for.Auftragsbeginn
DatumEnde = Forms!for.Auftragsende
Set db = CurrentDb
Set rst = db.OpenRecordset("tblMo")
`Hier sollte das Formular geöffnet werden, aber das musste ich nach vielen Versuchen aufgeben
For I = 0 To DateDiff("w", DatumStart, DatumEnde).Value – 1 `Das hier funktioniert überhaupt nicht
rst.AddNew
rst.Fields(1) = Forms!forMob.AnfNrMob
rst.Fields(2) = Forms!forMob.KGNr
rst.Fields(3) = ?? `Hier sollte jetzt die jeweilige KW eingetragen werden, also KW von Startdatum + I
rst.Update
Debug.Print I
Next I
rst.Close
db.Close
End Sub
Ich hoffe ihr könnt mir helfen. Danke!!
Zitat von: Knopf am Juni 14, 2017, 16:32:34
For I = 0 To DateDiff("w", DatumStart, DatumEnde).Value – 1 `Das hier funktioniert überhaupt nicht
Nach welchem Prinzip programmierst du?
Trail and error?
Copy and paste?
Es gibt eine Hilfe für VBA.
Dort erfährt man alles zu einem Befehl.
Wenn man die nicht nutzen kann, vergeudet man seine Zeit.
Ja, mein access-vba-skill-level liegt bei 0 und ich bin froh, dass ich überhaupt so weit gekommen bin. Ich kenne die Hilfe sehr gut nur hilft sie in diesem Fall leider nicht. Der Befehl Datediff () funktioniert an sich. Man kann es nur nicht = I setzten ubd ich weiß nicht was ich machen muss. Ist dieses Forum nicht für solche Fragen da?
DateDiff ist eine Funktion. Du kannst nicht einfach .Value anhängen. Dafür benötigt man ein Objekt.
Bevor du programmierst überleg dir eine Logik. Da liegt nämlich das Problem.
Die Schleife muss lauten.
For i = ErsteKalenderWoche + 1 To LetzteKlaenderWoche - 1
Das geht aber nur, wenn alle Kalenderwochen innerhalb eines Jahres liegen.
Hallo,
konkret heißt das:
Sub DatumDifferenz()
Dim DatumStart As Date
Dim DatumEnde As Date
Dim I As Long
Dim rst As DAO.Recordset
Dim db As DAO.Database
Dim KwFirst as Long
Dim KwLast as Long
DatumStart = Forms!forMob!Auftragsbeginn
DatumEnde = Forms!forMob!Auftragsende
If Year (DatumStart) <> Year (DatumEnde) Then Exit Sub
KwFirst = Datepart("ww", DatumStart, 2, 2) 'Achtung: Wochenberechnung nicht nach DIN!
KwLast = Datepart("ww", DatumEnde, 2, 2)
Set db = CurrentDb
Set rst = db.OpenRecordset("tblMo", dbOpenDynaset)
For I = KwFirst To KwLast
rst.AddNew
rst.Fields(1) = Forms!forMob!AnfNrMob
rst.Fields(2) = Forms!forMob!KGNr
rst.Fields(3) = I
rst.Fields(4) =Year(DatumStart)
rst.Update
Debug.Print I
Next I
rst.Close
db.Close
End Sub
Vielen Dank!!! Hat wunderbar geklappt :))