Ms access Microsoft Access表单使用;日期代码“;自动生成,但始终落后1周

Ms access Microsoft Access表单使用;日期代码“;自动生成,但始终落后1周,ms-access,office365,Ms Access,Office365,我的访问能力不强,正在试图找出日期代码字段传播不正确的原因。该字段显示为YYWWDD(年的最后两位数字、年的周数和工作周的天数(星期一=1-星期五=5),但在过去两年中,年的周数始终落后1周。如屏幕截图日期代码20242所示,这实际上是自1月第一周以来的25周 属性表中的代码如下所示: =IIf(IsNull([DaySelected]),IIf(Len(Format(Date(),"ww",2,3))=1,Format(Date(),"yy") & "0" & Format(D

我的访问能力不强,正在试图找出日期代码字段传播不正确的原因。该字段显示为YYWWDD(年的最后两位数字、年的周数和工作周的天数(星期一=1-星期五=5),但在过去两年中,年的周数始终落后1周。如屏幕截图日期代码20242所示,这实际上是自1月第一周以来的25周

属性表中的代码如下所示:

=IIf(IsNull([DaySelected]),IIf(Len(Format(Date(),"ww",2,3))=1,Format(Date(),"yy") & "0" & Format(Date(),"ww w",2,3),Format(Date(),"yywww ",2,3)),IIf(Len(Format(Date(),"ww",2,3))=1,Format(Date(),"yy") & "0" & Format(Date(),"ww",2,3) & [DaySelected],Format(Date(),"yyww",2,3) & [DaySelected]))

任何帮助都将不胜感激。

问题是,年份是ISO 8601年,而不是日历年,需要一个自定义函数来获取真正的ISO 8601周数:

”返回日期的ISO 8601周。
'相关ISO年由ref返回。
'
2016-01-06。古斯塔夫·布罗克,仙人掌数据ApS,CPH。
'
公众活动周(_
ByVal Date1作为日期_
可选ByRef(作为整数的年份)_
作为整数
常量MaxWeekValue为整数=53
常量MinWeekValue为整数=1
常量MaxMonthValue为整数=12
常量MinMonthValue为整数=1
将月份设置为整数
作为字符串的暗间隔
将结果设置为整数
Interval=“ww”
月=VBA.Month(日期1)
'最初,将ISO年设置为日历年。
IsoYear=VBA.年(日期1)
结果=日期部分(间隔、日期1、vbMonday、vbFirstFourDays)
如果结果=MaxWeekValue,则
如果DatePart(Interval,DateAdd(Interval,1,Date1),vbMonday,vbFirstFourDays)=MinWeekValue,则
好的,下一周是次年的第一周。
其他的
“这确实是下一个ISO年的第一周。
'对于DatePart错误是正确的。
结果=MinWeekValue
如果结束
如果结束
'调整周数属于下一年或上一年的年份。
如果月份=MinMonthValue,则
如果结果>=MaxWeekValue-1,则
“这是1月初的一天,属于上一个ISO年的最后一周。
等年=等年-1
如果结束
ElseIf Month=最大月值
如果结果=MinWeekValue,则
“这是12月底的日期,属于下一个ISO年的第一周。
等年=等年+1
如果结束
如果结束
'IsoYear通过引用返回。
周=结果
端函数
然后,构建一个简单的自定义函数来生成您的年-周-日编号:

Public函数FormatWeekDayIso8601(ByVal day选择为整数)作为字符串
将结果变暗为字符串
作为整数的年份
将等周设置为整数
ISO周=周(日期,ISO年)
结果=_
CStr(国际标准年模型100)和_
VBA.Format(IsoWeek,字符串(2,“0”))和_
CStr(选定日期)
FormatWeekDayIso8601=结果
端函数
现在,像这样使用它:

=FormatWeekDayIso8601(Nz([DaySelected],1))

问题是,年份是ISO 8601年,而不是日历年,需要一个自定义函数来获取真正的ISO 8601周数:

”返回日期的ISO 8601周。
'相关ISO年由ref返回。
'
2016-01-06。古斯塔夫·布罗克,仙人掌数据ApS,CPH。
'
公众活动周(_
ByVal Date1作为日期_
可选ByRef(作为整数的年份)_
作为整数
常量MaxWeekValue为整数=53
常量MinWeekValue为整数=1
常量MaxMonthValue为整数=12
常量MinMonthValue为整数=1
将月份设置为整数
作为字符串的暗间隔
将结果设置为整数
Interval=“ww”
月=VBA.Month(日期1)
'最初,将ISO年设置为日历年。
IsoYear=VBA.年(日期1)
结果=日期部分(间隔、日期1、vbMonday、vbFirstFourDays)
如果结果=MaxWeekValue,则
如果DatePart(Interval,DateAdd(Interval,1,Date1),vbMonday,vbFirstFourDays)=MinWeekValue,则
好的,下一周是次年的第一周。
其他的
“这确实是下一个ISO年的第一周。
'对于DatePart错误是正确的。
结果=MinWeekValue
如果结束
如果结束
'调整周数属于下一年或上一年的年份。
如果月份=MinMonthValue,则
如果结果>=MaxWeekValue-1,则
“这是1月初的一天,属于上一个ISO年的最后一周。
等年=等年-1
如果结束
ElseIf Month=最大月值
如果结果=MinWeekValue,则
“这是12月底的日期,属于下一个ISO年的第一周。
等年=等年+1
如果结束
如果结束
'IsoYear通过引用返回。
周=结果
端函数
然后,构建一个简单的自定义函数来生成您的年-周-日编号:

Public函数FormatWeekDayIso8601(ByVal day选择为整数)作为字符串
将结果变暗为字符串
作为整数的年份
将等周设置为整数
ISO周=周(日期,ISO年)
结果=_
CStr(国际标准年模型100)和_
VBA.Format(IsoWeek,字符串(2,“0”))和_
CStr(选定日期)
FormatWeekDayIso8601=结果
端函数
现在,像这样使用它:

=FormatWeekDayIso8601(Nz([DaySelected],1))

可能相关:可能相关:不。他们将完全替换它-如最后一行所示。效果很好!!感谢帮助。不。他们将完全替换它-如最后一行所示。效果很好!!感谢帮助。