VBA,Excel在2019年给我错误的日历周。
我将获得该日期的日历周:30.12.2019,一周必须为1,但是给53.
DatePart("ww", "30.12.2019", vbMonday, vbFirstFourDays) ' ->Output 53
DatePart("ww", "31.12.2019", vbMonday, vbFirstFourDays) ' ->Output 1
DatePart("ww", "29.12.2019", vbMonday, vbFirstFourDays) ' ->Output 52
快速查看正确的日历https://www.kalender-365.eu/kalender-2019.html
它必须1
- 而不是53。
有没有人能解决这个错误?
更多测试:
DatePart("w", "30.12.2019", vbMonday, vbFirstFourDays) ' -> Output 1, means Sunday.
但30.12.2019
是星期一。
DatePart("w", "31.12.2019", vbMonday, vbFirstFourDays) ' -> Output 2, means Monday
但是31.12.2019
是星期二
- 关于raiserle
答案 0 :(得分:1)
似乎是一个奇怪的错误。如果使用带有“21”的Excel函数WeekNum
作为第二个参数(在Excel 2010中可用),则30.12.2019的周可以正常(= 1)。从Excel 2013开始,还有一个函数IsoWeekNum
。如果您需要VBA中的周数,可以使用WorksheetFunction.WeekNum
答案 1 :(得分:0)
看起来问题与您的参数有关。在最后一个参数上尝试使用vbFirstJan1。
答案 2 :(得分:0)
我认为这是一个错误。 我还使用21作为参数使用Excel函数WeekNum()计算了该特定日期。 所有的日子都很好(我测试了2010年1月1日到2031年1月7日)。
但是VBA仅在“ Dec 30 2019”时产生此奇怪的错误。 我使用了该功能:
bWeek = Format(dDate, "ww", vbMonday, vbFirstFourDays)
此功能的所有计算均正确-除“ Dec 30 2019”外。 正确计算了“ Dec 29 2019”和“ Dec 31 2019”(结果= 52和01)。
在我看来VBA中存在错误。
解决方案(因为只有这一天):我通过if子句检查“ dDate”,并自行设置weeknum。
If CDate(Day(dDate) & "." & Month(dDate) & "." & Year(dDate)) = CDate("30.12.2019") Then
bWeek = 1
Exit Function
End If
进一步解释:我在CDate()中使用了Day(),Month()和Year(),因为否则带有时间戳的日期将不起作用,例如“ 30.12.2019 0:00”不等于“ 31.12.2019” “
答案 3 :(得分:0)
此外:
从我的角度来看,以上所有提示均无济于事。 使用VBA功能没有Layer8错误。 使用vbFirstJan1毫无意义,因为结果完全不同且不符合ISO。