Neuigkeiten:

Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!

Mobiles Hauptmenü

Datzensätze in Abhängigkeit des Datums einfügen

Begonnen von Knopf, Juni 14, 2017, 16:32:34

⏪ vorheriges - nächstes ⏩

Knopf

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!!

markusxy

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.

Knopf

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?

markusxy

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.


DF6GL

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

Knopf