2016-09-14 5 views
1

Ich weiß, dass dies eine einfache Frage sein kann, aber ich kann das nicht herausfinden. Wenn das Debugger für VBA ausgeführt wird, wird das dritte Argument in Zeile 11 als "9/13/2016" wie erwartet angezeigt, aber Start_d ist "06/09/2016" aus irgendeinem Grund ???DateAdd Rückgabewert ist falsch

Ich habe versucht, start_d zu einem String und Date-Objekt, beide ergeben das gleiche Ergebnis. Alles was ich will ist, dass start_d 7 Tage vor dem aktuellen Datum ist.

Sub addData(lastRow As Integer, lab() As String, c() As String, IP() As String, usage() As String, fName As String) 
Dim reportWeek As Integer 
Dim numWeeks As Integer 
Dim monthWeek As Integer 
Dim start_d As Date ' As String UPDATED 
Dim thisYear As String 
Dim thisMonth As String 
Dim thisDay As String 

' the reports run every monday 
start_d = DateAdd("d", -7, Date) 
'start_d = Format(start_d, "dd/mm/yyyy") UPDATED 

thisYear = year(start_d) 'year(CDate(start_d)) UPDATED 
thisMonth = month(start_d) 'month(CDate(start_d)) UPDATED 
thisDay = day(start_d) 'day(CDate(start_d)) UPDATED 

reportWeek = weekNum 
monthWeek = getWeekOfMonth(CDate(start_d)) 
numWeeks = weekCount(thisYear, thisMonth) 

Debug.Print reportWeek & monthWeek & numWeeks & thisYear & thisMonth & thisDay 
End Sub 
+0

Systemformat auf TT-MM-JJJJ ändern. – HA560

+0

gab es keine Option für TT-MM-JJJJ auf meinem Laptop, also habe ich TT-MM-JJ verwendet. start_d ist immer noch falsch: "06-09-2016". Warum ist es nicht einmal im Format des Systemdatums ... ?? –

+0

@ HA560 Ich war in der Lage, es an das Datum anzupassen, das Sie gefragt haben, es kommt immer noch mit "06-09-2016" –

Antwort

2

ändern start_d zu einem Date Typ, und Sie können mit den Format und CDate Konvertierungen weg:

Dim start_d As Date 

Welche gibt Ihnen:

Sub addData() 
Dim reportWeek As Integer 
Dim numWeeks As Integer 
Dim monthWeek As Integer 
Dim start_d As Date 
Dim thisYear As String 
Dim thisMonth As String 
Dim thisDay As String 

' the reports run every monday 
start_d = DateAdd("d", -7, Date) 

thisYear = Year(start_d) 
thisMonth = Month(start_d) 
thisDay = Day(start_d) 

reportWeek = WeekNum 
monthWeek = getWeekOfMonth(start_d) 
numWeeks = weekCount(thisYear, thisMonth) 

Debug.Print reportWeek & monthWeek & numWeeks & thisYear & thisMonth & thisDay 
End Sub 

EDIT Sie Scheint habe immer noch Probleme - lass uns versuchen mit einem Long zu re vorhandenes Datum:

Sub addData() 
Dim reportWeek As Integer 
Dim numWeeks As Integer 
Dim monthWeek As Integer 
Dim start_d As Date 
Dim thisYear As String 
Dim thisMonth As String 
Dim thisDay As String 

Dim today As Long 
today = Int(Now) 

' the reports run every monday 
start_d = DateAdd("d", -7, today) 

thisYear = Year(start_d) 
thisMonth = Month(start_d) 
thisDay = Day(start_d) 

reportWeek = WeekNum 
'monthWeek = getWeekOfMonth(start_d) 
'numWeeks = weekCount(thisYear, thisMonth) 

Debug.Print reportWeek & monthWeek & numWeeks & thisYear & thisMonth & thisDay 
End Sub 
+0

Ich versuchte dies und tat es gerade jetzt aus Gründen der Gesundheit. Ich habe start_d zu einem Date-Objekt geändert und meinen Code von den cdate- und Formatteilen befreit. Ach ... immer noch nicht gehen ... :( –

+0

Ich habe eine Bearbeitung hinzugefügt, die eine Long verwendet, um das Datum als eine Zahl zu speichern. Sie sollten nicht, aber hoffentlich funktioniert es für Sie. – ThunderFrame

+0

Wenn es immer noch nicht 't work - du könntest versuchen 'start_d = DateAdd (" d ", -7, heute)' zu 'start_d = Int (Now) - 7' zu ändern – ThunderFrame