在 MS Access 中根据年份和周数填充周开始日期和周结束日期

Populate Week Start and Week End dates given the Year and Week Number in MS Access


我在访问表单上有一个组合框,用户可以从中 select 特定年份,比如从下拉列表中选择 2014 年。此表单上存在另一个组合框,其中包含从 1 到 53 的周数下拉列表。这两个组合框没有链接。 (还是我必须 link/bound 他们?)

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

我想要做的是让 selected 周数和年份的周开始和结束日期填充在 "WeekStart""WeekEnd" 个文本框。我从星期天开始我的一周。我将此代码放在 "week number" 组合框的 "After Update" 事件中。

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

但我知道这是不对的,我被困住了。任何帮助,将不胜感激。而且,我必须将周数绑定到年份吗?如果是这样,我该怎么做。谢谢

您可以使用 VBA 函数来计算一周的开始日期。例如,使用这样的形式:

你可以像这样使用表单代码

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