PDA

Vollständige Version anzeigen : Tabelle automatisch mit Kalenderwochen füllen


Gomilli
28.09.2005, 08:27
Hallo,

ich suche eine Möglichkeit, um eine Tabelle automatisch mit Kalenderwochen und dazugehörigen Datum zu befüllen.

Die Spalten der Tabelle sind

KW (Kalenderwoche)
von (erstes Datum der KW)
bis (letztes Datum der KW)

gibt's da eine Möglichkeit? Es soll vermieden werden, dass man jede Kw einzeln eintippen muss.

Danke schonmal,
Gomilli

Morli
28.09.2005, 08:52
Da sollte Dir eine entsprechende Anfügeabfrage unter Verwendung von DonKarls Funktion zur Ermittlung des jeweiligen Montags der KW weiterhelfen.
http://www.donkarl.com/FAQ/FAQ2Allgemein.htm#2.9

Morli

Gomilli
28.09.2005, 09:47
Ich schau mir das mal an...danke!

Gomilli
28.09.2005, 10:23
ok, damit komme ich noch nicht so ganz klar. hab noch nicht allzuviel erfahrung mit access und vb...gibts denn irgendwo fertige tabellen, die man evtl benutzen kann?

Morli
28.09.2005, 11:55
Mal angenommen Deine Tabelle heißt "TabKW" und hat die Felder "Kalenderwoche", "von" und "bis" dann könntest Du z.B. für das Jahr 2005 die Tabelle wie folgt füllen. Für andere Jahre mußt Du die Jahreszahl im Code entsprechend ändern. Das ist jetzt ohne Überprüfung ob für das von Dir gewünschte Jahr schon Eintragungen vorhanden sind, also wenn Du den Code mit dem gleichen Jahr 2 mal aufrufst, wird das Ganze halt 2 mal angelegt.

Public Function fctKWMon(ArgKW As Byte, Optional ArgJahr)
'gibt den Montag der übergebenen Kalenderwoche zurück
'verwendet die in Europa übliche Einstellung: KW 1 = die erste mit 4 Tagen
'von Karl Donaubauer

Dim M As Date
If IsMissing(ArgJahr) Then ArgJahr = Year(Date)
M = DateSerial(ArgJahr, 1, 1) + (ArgKW - 1) * 7
M = M + 1 - Weekday(M, vbMonday)
If Format(M, "ww", vbMonday, vbFirstFourDays) <> ArgKW Then M = M + 7
If (ArgKW = 1 Or ArgKW = 53) And Day(M) > 4 And Day(M) < 8 Then M = M - 7
fctKWMon = M

End Function

Sub KWTabelleFüllen()
Dim rst As DAO.Recordset
Dim i As Byte
Dim Jahr As Integer

Jahr = 2005 'Hier kannst Du die Jahreszahl entsprechend eingeben!

Set rst = CurrentDb.OpenRecordset("TabKW")
For i = 1 To 52
rst.AddNew
rst!Kalenderwoche = i
rst!von = fctKWMon(i, Jahr)
rst!bis = fctKWMon(i, Jahr) + 6
rst.Update
Next
rst.Close
Set rst = Nothing
End Sub

Morli

Gomilli
28.09.2005, 13:42
das gefällt mir schonmal viiel besser. danke schonmal. aber wie muss das ganze aussehen, wenn die regelungfür die (mögliche) 53. kalenderwoche drin sein muss?

dann müsste
rst!von = fctKWMon(53,2005) < (28.12.2005)
sein glaube ich. nur wie bringe ich das mit dem datum da rein??

Gomilli
29.09.2005, 07:18
kann mir da jemand helfen?

Gomilli
29.09.2005, 08:02
1. frage: würde das so funktionieren?...
Sub KWTabelleFüllen()
Dim rst As DAO.Recordset
Dim i As Byte
Dim Jahr As Integer
Dim datum As Date
Dim zwisch As Date

startjahr = 2005 'Hier wird eingestellt, für welchen Zeitraum
endjahr = 2010 'die Kalenderwochen in die Tabelle geschrieben werden sollen!


Set rst = CurrentDb.OpenRecordset("Bereitschaftswochen")
For x = startjahr To endjahr
Date = "28.12." & x
For i = 1 To 53
If (i < 53) Then
rst.AddNew
rst!KW = i
rst!von = fctKWMon(i, x)
rst!bis = fctKWMon(i, x) + 6
rst!Jahr = Jahr
rst.Update
Else
zwisch = fctKWMon(i, x)
If (zwisch <= Date) Then
rst.AddNew
rst!KW = i
rst!von = fctKWMon(i, x)
rst!bis = fctKWMon(i, x) + 6
rst!Jahr = x
rst.Update
End If
End If
Next

Next
rst.Close
Set rst = Nothing
End Sub


2. frage: haltet mich für dumm, aber ich habs noch nie gebraucht. wie führe ich so eine funktion jetzt einmal aus?