我在MS Access表单和报表中创建了一个函数来获取每周的第一个日期,但是它在上个月返回了一周的第一天。
我需要它只返回当前的月份日期。如果当周第一天在上个月,则返回当月的第一天为一周的第一天。
电流输出
当从日期选择器中选择1-10-2018时,它返回27-09-2018,这是上个月的第一个星期,但我需要它返回textbox中选择的月份的第一个日期。
Function GetFirstofWeek(dtDate As Date)
GetFirstofWeek = DateAdd("d", dtDate, -(Weekday(dtDate)) + 1)
' Excel formula for this function which is perfect and may be converted to function as required ‘=MAX(B2-WEEKDAY(B2,14)+1, EOMONTH(B2, -1)+1)
GetFirstofWeek = DateAdd("d", dtDate, -(Weekday(dtDate, vbThursday) - 1))
End Function每周的最后一天
Function GetLastofWeek(dtDate) as date
'=MIN(B2+(7-WEEKDAY(B2,14)), EOMONTH(B2, 0))
‘this excel formula return date as I need.
GetLastofWeek = DateAdd("d", dtDate, (7 - (Weekday(dtDate, vbWednesday)) + 1))
End Function在此功能中,周的最后一天必须是当月,如果第一周的月份结束,那么周的最后一天将被关闭,而周的最后一天将是周的第一天或当前周中剩余的天数。
发布于 2018-10-20 23:13:48
除非我误解了您的要求,请考虑以下两个功能:
第一周
Function FirstOfWeek(datRef As Date) As Date
If Day(datRef) >= Weekday(datRef, vbThursday) Then
FirstOfWeek = DateAdd("d", 1 - Weekday(datRef, vbThursday), datRef)
Else
FirstOfWeek = DateAdd("d", 1 - Day(datRef), datRef)
End If
End Function一些例子
?FirstOfWeek(#2018-10-04#)
04/10/2018
?FirstOfWeek(#2018-10-10#)
04/10/2018
?FirstOfWeek(#2018-10-11#)
11/10/2018
?FirstOfWeek(#2018-10-03#)
01/10/2018 在这里,函数测试为了获得Thursday->Wednesday周的第一天而要减去的天数是否小于当前月中的天数,如果是,则返回当前月份的第一天。
表达式DateAdd("d", 1 - Day(datRef), datRef)也可以被写入DateSerial(Year(datRef), Month(datRef), 1)以获得相同的结果。
上周最后一周
Function LastOfWeek(datRef As Date) As Date
LastOfWeek = DateAdd("d", 7 - Weekday(datRef, vbThursday), datRef)
If Day(datRef) > Day(LastOfWeek) Then
LastOfWeek = DateSerial(Year(datRef), Month(datRef) + 1, 0)
End If
End Function一些例子
?LastOfWeek(#2018-10-04#)
10/10/2018
?LastOfWeek(#2018-10-03#)
03/10/2018
?LastOfWeek(#2018-09-27#)
30/09/2018 与第一个函数类似,该函数首先计算以下Wednesday的日期,然后检查该日期的天数是否小于所提供日期的天数(指示它已误入下一个月)。如果是,则返回当前月份的最后一天。
发布于 2018-10-20 19:15:01
您需要检查输出月份是否与输入月份匹配。为了避免不断地为GetFirstofWeek分配值,我为您的初始计算创建了一个Temp日期。一旦验证完成,就分配输出。
要从Access调用Excel函数,请创建一个Excel.Application实例,由@ComputerVersteher解释(谢谢)
注意:由于创建的对象的存在,不使用excel。代码打算从Access运行。
Option Explicit
Function GetFirstofWeek(dtDate As Date)
Dim Temp As Date
'Temp = DateAdd("d", dtDate, -(Weekday(dtDate)) + 1)
Temp = DateAdd("d", dtDate, -(Weekday(dtDate, vbThursday) - 1))
If Month(Temp) = Month(dtDate) Then
GetFirstofWeek = Temp
Else
Dim obj as Object: Set obj = CreateObject("Excel.Application")
GetFirstofWeek = obj.WorksheetFunction.EoMonth(Temp, 0) + 1
Set obj = Nothing
End If
End Function
Function GetLastofWeek(dtDate) As Date
Dim Temp As Date
Temp = DateAdd("d", dtDate, (7 - (Weekday(dtDate, vbWednesday)) + 1))
If Month(Temp) = Month(dtDate) Then
GetLastofWeek = Temp
Else
Dim obj as Object: Set obj = CreateObject("Excel.Application")
GetLastofWeek = obj.WorksheetFunction.EoMonth(Temp, 0)
Set obj = Nothing
End If
End Functionhttps://stackoverflow.com/questions/52908562
复制相似问题