2016-09-14 196 views
1

我知道这可能是一个简单的问题,但我无法弄清楚这一点。当运行VBA的调试器时,第11行的第三个参数按预期显示为“9/13/2016”,但由于某些原因,start_d是“06/09/2016”?DateAdd返回值不正确

我曾尝试将start_d设置为字符串和Date对象,两者都产生相同的结果。我想要的只是start_d在当前日期前7天。

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

将系统日期格式更改为dd-mm-yyyy。 – HA560

+0

在我的笔记本电脑上没有dd-mm-yyyy选项,所以我使用了dd-MM-yy。 start_d仍然不正确:“06-09-2016”。为什么它甚至不是系统日期的格式......? –

+0

@ HA560我可以自定义它到您提出的日期,它仍然提出“06-09-2016” –

回答

2

变化start_dDate类型,你可以用FormatCDate转换做掉:

Dim start_d As Date 

它给你:

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 

编辑 看来你我们仍然有问题 - 让我们尝试一下Long目前日期:

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

我尝试过这一点,为了理智的缘故,我再次做了。我将start_d更改为Date对象,并清除了cdate和格式化部分的代码。唉...仍然没有去... :( –

+0

我已经添加了一个编辑,使用一个长来保存日期作为一个数字。你不应该需要,但希望它适用于你 – ThunderFrame

+0

如果它仍然doesn 't work - 你可以尝试改变'start_d = DateAdd(“d”,-7,今天)''start_d = Int(Now) - 7' – ThunderFrame