在MS Access中给出年份和周数的填充周开始和周结束日期

时间:2015-12-23 16:11:14

标签: access-vba ms-access-2010


我在访问表单上有一个组合框,用户可以从下拉列表中选择特定年份,例如2014年。此表单上存在另一个组合框,其中周数从1到53下拉。这两个组合框未链接。 (或者我必须链接/绑定它们吗?)

此外,此表单上有两个名为" WeekStart" " WeekEnd" 的文本框。

我想要做的是在" WeekStart" " WeekEnd&中填充所选周数和年份的周开始日期和结束日期。 #34; 文本框。我星期天开始我的一周。我将此代码放在"周数" 组合框的" After Update" 事件中。

  

Me.WeekStart = DateSerial(Me.cboYear, 1, Me.cboWeekNum * 7)

但我知道这不对,而且我被困了。任何帮助,将不胜感激。而且,我必须将周数限制在一年中吗?如果是这样,我该怎么做呢。谢谢

1 个答案:

答案 0 :(得分:2)

您可以使用VBA功能计算周的开始日期。例如,使用如下形式:

frmWeekStart.png

你可以使用像这样的表格代码

Option Compare Database
Option Explicit

Private Sub cboWeekNum_AfterUpdate()
    UpdateStartEndDates
End Sub

Private Sub cboYear_AfterUpdate()
    UpdateStartEndDates
End Sub

Private Sub UpdateStartEndDates()
    Me.txtWeekStart.Value = WeekStartDate(Me.cboYear.Value, Me.cboWeekNum.Value)
    Me.txtWeekEnd.Value = DateAdd("d", 6, Me.txtWeekStart.Value)
End Sub

Private Function WeekStartDate(yyyy As Integer, ww As Integer) As Date
    ' per ISO 8601, week starts on Monday
    Dim Jan1 As Date
    Jan1 = DateSerial(yyyy, 1, 1)
    Dim Jan1Weekday As Integer
    Jan1Weekday = Weekday(Jan1, vbThursday)
    Dim FirstThursday As Date
    ' per standard, Week 1 contains the first Thursday of the year
    FirstThursday = DateAdd("d", IIf(Jan1Weekday = 1, 0, 8 - Jan1Weekday), Jan1)
    ' back up 3 days to Monday, then add 7 days for each week after Week 1
    WeekStartDate = DateAdd("d", -3 + (7 * (ww - 1)), FirstThursday)
End Function