TKSoft-Online

Willkommen, Gast
Benutzername: Passwort: Angemeldet bleiben:

GetDateFromWeek Funktion
(1 Leser) (1) Gast
Alles rund um MS-Access
  • Seite:
  • 1

THEMA: GetDateFromWeek Funktion

GetDateFromWeek Funktion 1 Jahr, 7 Monate her #716

  • EBlajs
  • OFFLINE
  • Fresh Boarder
  • Beiträge: 4
  • Karma: 0
Ich habe diese Funktion hier gefunden und das wäre genau was ich für mein Access Applikation brauchen würde. Als ich das bei mir getestet habe ist aber folgendes aufgetreten:
Für den Montag der ersten Woche im Jahr 2010 liefert mir die Funktion das Datum 28-12-2009 wobei nach meinem Tischkalender dies das Datum 04-01-2010 sein müsste? Ermittle ich die Kalenderwoche für das Datum 28.12.2009 direkt in Access mit DatTeil("ww";#28.12.2009#;2;2) so liefert mir das die KW 53. Für meine Funktion bräuchte ich die Kalenderwochen so wie sie auf jedem "Tischkalender" angegeben sind. Das Problem habe ich sowohl in MSAccess 2002 und 2007.

Hat jemand eine Idee was da der Grund sein könnte oder was ich hier falsch machen? Für Tipps wäre ich sehr dankbar, bräuchte die Funktion sehr dringend und sie liefert eigentlich genau dass was ich brauche abgesehen von dieser Ungereimtheit.

Vielen Dank und herzliche Grüsse,

Ernst

Aw: GetDateFromWeek Funktion 1 Jahr, 7 Monate her #717

  • TommyK
  • OFFLINE
  • Administrator
  • Beiträge: 502
  • Karma: 4
Hallo Ernst,

ich kann Dein Problem nicht nach vollziehen.
Die Funktion aus meiner Bsp-DB gibt bei
MsgBox GetDateFromWeek(1, 1, 2010)

den 04.01.2010 aus.
s. auch Bild

kw1.JPG
Gruß TommyK
Letzte Änderung: 1 Jahr, 7 Monate her von TommyK.

Aw: GetDateFromWeek Funktion 1 Jahr, 7 Monate her #718

  • EBlajs
  • OFFLINE
  • Fresh Boarder
  • Beiträge: 4
  • Karma: 0
Hallo Tommy,

vielen Dank für die rasche Antwort. Ich habe mir eh gedacht, dass die Funktion ausgereift ist deswegen ist es für mich so schwierig das nachzuvollziehen. Ich muss vorausschicken, dass ich in Access-VBA nicht so bewandert bin. Untenstehend der Code, denn ich in mein Modul mdlGetDateFromWeek eingetragen habe:

<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

Option Compare Database
Option Explicit

Public Function GetDateFromWeek(ByVal nWeek As Integer, _
nDayOfWeek As Integer, _
Optional ByVal nYear As Integer = -1)
'*******************************************
'Name: GetDateFromWeek (Function)
'Purpose:
'Author: Dieter Otter, angepasst an VBA von Thomas Keßler
'Date:
'Called by:
'Calls:
'Inputs:
'Output:
'Example: vMonday = GetDateFromWeek(12, vbMonday, 2003)
'*******************************************
Dim nCurWeek As Integer
Dim vStart As Variant
Dim vStart1 As Variant
Dim vMonday As Variant
Dim vSunday As Variant
Dim nDay As Integer

Select Case nDayOfWeek
Case 1: nDayOfWeek = vbMonday
Case 2: nDayOfWeek = vbTuesday
Case 3: nDayOfWeek = vbWednesday
Case 4: nDayOfWeek = vbThursday
Case 5: nDayOfWeek = vbFriday
Case 6: nDayOfWeek = vbSaturday
Case 7: nDayOfWeek = vbSunday
End Select
' Kein Jahr angeben? Dann aktuelles Jahr verwenden!
If nYear = -1 Then nYear = Year(Date)
' aktuelle Woche im Jahr nYear ermitteln
vStart1 = DateSerial(nYear, Month(Date), Day(Date))
nCurWeek = Kalenderwoche(vStart1, False)
' Datum der gewünschten Woche ermitteln
vStart = DateAdd("ww", nWeek - nCurWeek, vStart1)
' Wochenanfang ermitteln
nDay = Weekday(vStart, vbMonday)
' Datum des gewünschten Wochentags ermitteln
If nDayOfWeek = vbSunday Then
GetDateFromWeek = DateAdd("d", -nDay + 7, vStart)
Else
GetDateFromWeek = DateAdd("d", -nDay + nDayOfWeek - 1, vStart)
End If
End Function


Function Kalenderwoche(XDatum As Variant, fModus As Boolean) As String
' Gibt Ein Datum als "ww\jjjj" String zurück
' Wenn eine Wochennummer in ein unterschiedliches Jahr fällt,
' so wird dies berücksichtigt
' d.h. 31.12.2002 = 01\2003 bzw. 1.1.1999 = 53\1998
Dim x, Y, Z

Kalenderwoche = ""
If Not IsDate(XDatum) Then Kalenderwoche = "": Exit Function
XDatum = CDate(XDatum)
x = Year(XDatum)
Y = Month(XDatum)
Z = CInt(Format(XDatum, "ww", vbMonday, vbUseSystem))
If Z > 52 Then
If Format(XDatum + 7, "ww", vbMonday, vbFirstFourDays) = 2 Then Z = 1
End If
If Y = 12 And Z < 40 Then x = x + 1
If Y = 1 And Z > 10 Then x = x - 1
If fModus = True Then
Kalenderwoche = Right("00" & Z, 2) & "/" & Right("0000" & x, 4)
Else
Kalenderwoche = Right("00" & Z, 2)
End If
End Function

<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

Wenn ich dieses Modul in einer Message Box wie von Dir beschrieben ausgebe erhalte ich den 28.12.2009. Das muss irgendwie am Code liegen oder an meinem Computer aber das Resultat bekommen auf drei unterschiedlichen PCs. Ich habe den Code kopiert, selber würde ich auf so etwas niemals kommen, dafür sind meine VBA Kenntnisse viel zu schwach. Habe ich da etwas falsch gemacht? Ich bin für jede Tipp dankbar, die Funktion wäre für meine Bedürfnisse perfekt geeignet.

Ernst

Aw: GetDateFromWeek Funktion 1 Jahr, 7 Monate her #719

  • EBlajs
  • OFFLINE
  • Fresh Boarder
  • Beiträge: 4
  • Karma: 0
Hallo,

ich habe jetzt die Beispiel DB nochmals runtergeladen und sie bei mir mit MS Acc02 geöffnet. Bei mir liefert die KW1 von 2010 auch in der Beispiel DB dasselbe Datum. Ich habe versucht ein Snapshot des Formulers in der Beispiel DB als Anhang mitzuschicken, hoffe es funktioniert.

Danke,

Ernst

Dateianhang:

Dateiname: Snapshot_Beispiel_DB.zip
Dateigröße: 249302

Aw: GetDateFromWeek Funktion 1 Jahr, 7 Monate her #720

  • TommyK
  • OFFLINE
  • Administrator
  • Beiträge: 502
  • Karma: 4
Hallo Ernst,

unter 2003 zeigt es mir die Werte richtig an.
Ich teste es heute Nachmittag zu Hause nochmal mit A2007 und A2010 und melde mich dann.
Gruß TommyK

Aw: GetDateFromWeek Funktion 1 Jahr, 7 Monate her #721

  • TommyK
  • OFFLINE
  • Administrator
  • Beiträge: 502
  • Karma: 4
Hallo Ernst,

die DB hier im Anhang zeigt unter A03, A07 und A10 die richtigen Werte bei mir an.

Dateianhang:

Dateiname: tk_KW00.rar
Dateigröße: 25283
Gruß TommyK
Letzte Änderung: 1 Jahr, 7 Monate her von TommyK.

Aw: GetDateFromWeek Funktion 1 Jahr, 7 Monate her #722

  • EBlajs
  • OFFLINE
  • Fresh Boarder
  • Beiträge: 4
  • Karma: 0
Hallo Tommy,

danke für das Feedback. Ich habe die Datei nochmals runtergeladen und erhalte noch immer diese seltsame Konstellation wie im Anhang ersichtlich (habe das in Access 2002 und 2007 mit identem Ergebnis ausprobiert). Ich habe mittlerweile eine Behelfsfunktion gefunden, mit der man den Montag einer angegebenen Woche ermittelt und von dort arbeite ich dann mit der Funktion DatAdd. So geht es. Es würde mich aber natürlich interessieren, warum das auf einem Computer funktioniert und am anderen nicht. Aber um das herauszufinden müsste man bessere EDV-Kenntnise haben als bei mir vorhanden. Auf jeden Fall danke für die Mühen. Leider scheint es, dass ich die Funktion bei mir nicht einsetzen kann obwohl ich sie des öfteren brauchen könnte. Mit der obigen Behelfsprozedur geht es auch aber halt nicht so elegant.

Ernst

Dateianhang:

Dateiname: Snapshot_Access_2002.zip
Dateigröße: 57591

Aw: GetDateFromWeek Funktion 1 Jahr, 7 Monate her #723

  • TommyK
  • OFFLINE
  • Administrator
  • Beiträge: 502
  • Karma: 4
Hallo Ernst,

erweitere mal den Code um die letzten Zeilen:
 
Public Function GetDateFromWeek(ByVal nWeek As Integer, nDayOfWeek As Integer, _
Optional ByVal nYear As Integer = -1)
'*******************************************
'
Name: GetDateFromWeek (Function)
'Purpose:
'
Author: Dieter Otter, angepasst an VBA von Thomas Keßler
'Date:
'
Called by:
'Calls:
'
Inputs:
'Output:
'
Example: vMonday = GetDateFromWeek(12, vbMonday, 2003)
'*******************************************
 
Dim nCurWeek As Integer
Dim vStart As Variant
Dim vStart1 As Variant
Dim vMonday As Variant
Dim vSunday As Variant
Dim nDay As Integer
 
Select Case nDayOfWeek
Case Is = 1
nDayOfWeek = vbMonday
Case Is = 2
nDayOfWeek = vbTuesday
Case Is = 3
nDayOfWeek = vbWednesday
Case Is = 4
nDayOfWeek = vbThursday
Case Is = 5
nDayOfWeek = vbFriday
Case Is = 6
nDayOfWeek = vbSaturday
Case Is = 7
nDayOfWeek = vbSunday
End Select
 
'
Kein Jahr angeben? Dann aktuelles Jahr verwenden!
If nYear = -1 Then nYear = Year(Date)
 
' aktuelle Woche im Jahr nYear ermitteln
vStart1 = DateSerial(nYear, Month(Date), Day(Date))
nCurWeek = Kalenderwoche(vStart1, False)
 
'
Datum der gewünschten Woche ermitteln
vStart = DateAdd("ww", nWeek - nCurWeek, vStart1)
 
' Wochenanfang ermitteln
nDay = Weekday(vStart, vbMonday)
 
'
Datum des gewünschten Wochentags ermitteln
If nDayOfWeek = vbSunday Then
GetDateFromWeek = DateAdd("d", -nDay + 7, vStart)
Else
GetDateFromWeek = DateAdd("d", -nDay + nDayOfWeek - 1, vStart)
End If
Debug.Print "Aktueller Tag: " & vStart1
Debug.Print "Akuelle KW: " & nCurWeek
Debug.Print "Datum der gewünschten Woche: " & vStart
Debug.Print "Wochenanfang: " & nDay
Debug.Print "Ergebnis: " & GetDateFromWeek
End Function
 

Am besten Du rufst die Funktion mal direkt auf:
=GetDateFromWeek(1;1;2010)

Dann kannst Du über das Menü Ansicht -> Direktfenster im VBA-Editor den Inhalt der Variablen sehen.
s. Bild
kw2.JPG
Gruß TommyK
  • Seite:
  • 1
Moderatoren: TommyK
Ladezeit der Seite: 2.43 Sekunden

Login

Latest Comments

Latest Forum Posts

Mehr »

Download Statistik

41 Kategorien
187 Dateien
173444 Downloads

JoomlaWatch 1.2.11 - Joomla Monitor and Live Stats by Matej Koval