Neuigkeiten:

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

Mobiles Hauptmenü

Nummerierung von Daten

Begonnen von boehnli01, August 14, 2011, 15:00:43

⏪ vorheriges - nächstes ⏩

boehnli01

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



DF6GL

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.

boehnli01

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.


database

#3
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

boehnli01

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


database

Hallo,

in meinem Code oberhalb gibt es KEIN   Next lngSerial  !!

Die Zählschleife iteriert über lngCount!

boehnli01

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   

daolix

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

database

#8
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

boehnli01

Vielen vielen Dank an alle. Es hat wunderbar funktioniert.

MzKlMu

Hallo,
mich würde mal interressieren, zu was man einen solchen Zähler braucht. Möglicherweise gibt es ja eine ganz andere Lösung.
Gruß Klaus

boehnli01


MzKlMu

Hallo,
und wozu der Zähler?
Gruß Klaus

boehnli01

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.

DF6GL

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.