Hallo zusammen,
Mit dieser Prozedur mache ich eine Kalender Tabelle (inkl.wkend). Nun möchte vor dem Feld_Datum eine Nummerierung mit dem Feld_Serial durchführen. Ich will die Nummerierung aber so machen das jeweils der Samstag & Sonntag die gleiche Seriennummer wie der vorgehende Freitag haben.
Könnte mir da bitte jemand helfen wie ich die Prozedur ändern muss ?
With CurrentDb.OpenRecordset("tbl_calender_raw1")
For lngCount = 0 To Nz(Me!Anzahl_Tage, 0)
.AddNew
!Feld_Datum = CDate(Me.Start_Datum) + lngCount
!Feld_Wochentag = WeekDay(!Feld_Datum, vbMonday)
!Feld_Woche = DatePart("ww", !Feld_Datum, 2, 2)
!Feld_Monat = Month(!Feld_Datum)
!Feld_Jahr = Year(!Feld_Datum)
.Update
Next lngCount
End With
Hallo,
lass einen weiteren Zähler ("lngSerial") mitlaufen und erhöhe den jeweils nur wenn es sich nicht um Weekday=6 oder Weekday=7 handelt.
Hi, Das mit dem Ingserial habe ich noch hingekriegt, aber für den Rest fehlt es mir an VBA Wissen:
.AddNew
!Feld_Serial = Ingserial
!Feld_Datum = CDate(Me.Start_Datum) + lngCount
!Feld_Wochentag = WeekDay(!Feld_Datum, vbMonday)
!Feld_Woche = DatePart("ww", !Feld_Datum, 2, 2)
!Feld_Monat = Month(!Feld_Datum)
!Feld_Jahr = Year(!Feld_Datum)
.Update
Kannst du mir bitte mit dem Rest helfen ?
Vielen dank für dein HIlfe.
Hallo,
das heißt nicht Ingserial sondern lngSerial ... der erste Buchstabe ist ein 'L' und die ersten 3 Zeichen stehen für LongInteger.
Also zuerst deklarieren... und dann verwenden - in Etwa so (eine Möglichkeit):
Dim lngSerial as Long
With CurrentDb.OpenRecordset("tbl_calender_raw1")
'Startwert des Zählers bestimmen
If WeekDay(!Feld_Datum, vbMonday) <= 5
lngSerial = WeekDay(!Feld_Datum, vbMonday)
Else
lngSerial = 5
End if
For lngCount = 0 To Nz(Me!Anzahl_Tage, 0)
.AddNew
!Feld_Serial = lngSerial
!Feld_Datum = CDate(Me.Start_Datum) + lngCount
!Feld_Wochentag = WeekDay(!Feld_Datum, vbMonday)
!Feld_Woche = DatePart("ww", !Feld_Datum, 2, 2)
!Feld_Monat = Month(!Feld_Datum)
!Feld_Jahr = Year(!Feld_Datum)
'Zähler erhöhen wenn Bedingungen erfüllt sind
If WeekDay(!Feld_Datum, vbMonday) < 5 Then
lngSerial = lngSerial + 1
ElseIf WeekDay(!Feld_Datum, vbMonday) >= 5 then
lngSerial = 5
Else
lngSerial = WeekDay(!Feld_Datum, vbMonday)
End If
.Update
Next lngCount
End With
Sollte eigentlich die richtigen Zählerstände liefern können
HTH
Danke für die Hilfe.
Ich bekomme folgend Fehlermeldung beim letzten "Next lngSerial"
Compile Error: Next without For
Wenn ich den "Next lngSerial" entferne, kommt er mit:
Compile Error: End With without With
Hallo,
in meinem Code oberhalb gibt es KEIN Next lngSerial !!
Die Zählschleife iteriert über lngCount!
Habe es fast geschafft.
Er zeigt mir nun aber bei jedem Wochentag 6, 7 & 1 die Serien Nummer 5, aber ich wollte es folgendermassen:
Serie Datum Wochentag
5 15.01.2011 6
5 16.01.2011 7
6 17.01.2011 1
7 18.01.2011 2
8 19.01.2011 3
9 20.01.2011 4
10 21.01.2011 5
10 22.01.2011 6
10 23.01.2011 7
11 24.01.2011 1
Dann evtl. so.
dim lAnzDays As Long, d as date
d = CDate(Me.Start_Datum)
lAnzDays = Nz(Me!Anzahl_Tage, 0)
With CurrentDb.OpenRecordset("tbl_calender_raw1")
lngSerial = IIf(Weekday(d, vbMonday) <= 5, Weekday(d, vbMonday) - 1, 5)
For lngCount = 0 To lAnzDays
If Weekday(d + lngCount , vbMonday) <= 5 Then lngSerial = lngSerial + 1
.AddNew
!Feld_Serial = lngSerial
!Feld_Datum = d + lngCount
!Feld_Wochentag = WeekDay(d + lngCount, vbMonday)
!Feld_Woche = DatePart("ww", d + lngCount, 2, 2)
!Feld_Monat = Month(d + lngCount)
!Feld_Jahr = Year(d + lngCount)
.Update
next
End With
Guten Morgen,
oh, sorry, ich dachte die Nummerierung sollte immer nur innerhalb einer Woche erfolgen ...
hmmm... "...bei jedem Wochentag 6, 7 & 1 die Serien Nummer 5...
Hab' da anscheinend was verwurschtelt ...
Dim lngSerial as Long
With CurrentDb.OpenRecordset("tbl_calender_raw1")
'Startwert des Zählers bestimmen
If WeekDay(Me.Start_Datum, vbMonday) <= 5 Then
lngSerial = WeekDay(Me.Start_Datum, vbMonday)
Else
lngSerial = 5
End if
For lngCount = 0 To Nz(Me!Anzahl_Tage, 0)
.AddNew
!Feld_Serial = lngSerial
!Feld_Datum = CDate(Me.Start_Datum) + lngCount
!Feld_Wochentag = WeekDay(!Feld_Datum, vbMonday)
!Feld_Woche = DatePart("ww", !Feld_Datum, 2, 2)
!Feld_Monat = Month(!Feld_Datum)
!Feld_Jahr = Year(!Feld_Datum)
'Zähler erhöhen wenn Bedingungen erfüllt sind
If CLng(!Feld_Wochentag) <= 5 Then
lngSerial = lngSerial + 1
End If
.Update
Next lngCount
End With
oder die zeilenmäßig kürzere Variante von daolix
Vielen vielen Dank an alle. Es hat wunderbar funktioniert.
Hallo,
mich würde mal interressieren, zu was man einen solchen Zähler braucht. Möglicherweise gibt es ja eine ganz andere Lösung.
Hi, für die Berechnung von Daten:
Siehe auch: http://www.access-o-mania.de/forum/index.php?topic=14604.msg83462#msg83462
Gruss Cédric
Hallo,
und wozu der Zähler?
Mmh wie soll ich das erklären....
Ich habe einen Produktionskalender beim nicht alles Tage aktiv sind. Nun will ich den Produktionsstart ermitteln in dem ich das Produktionsende minus die Produktionszeit rechne. In der 1sten Abfrage rechne ich nicht das Datum minus Produktionszeit, sondern die Seriennummer diese Datums minus die Produktionszeit. In der 2ten Abfrage linke ich den die 2 Seriennummer und ermittle so das Startdatum. Bisschen kompliziert. Sorry.
Hallo,
Wie ich im anderen Beitrag schon erzählt habe, ist für reine Produktionszeit-Berechnungen eine laufende Nummer für die aktiven (realen) Arbeitstage von Nöten.
Diese laufende Nummer muss lückenlos sein. Deine Schleife allerdings berücksichtigt nicht Feiertage , Brückentage oder andere arbeitsfreie Tage, die ausser Sa und So noch auftreten können. Wenn diese arbeitsfreien Tage berücksichtigt werden sollen, braucht es zusätzlich eine Tabelle mit den Datumswerten der entspr. freien Tage und eine entspr. angepasste Programmierung bei der Ezeugung der laufenden Nr.
Hallo,
Kalender wird über einen separaten Feiertag-Tabelle zuerst upgedated.
Gruss Cédric