【问题标题】:Populate Week Start and Week End dates given the Year and Week Number in MS Access给定 MS Access 中的年和周数,填充周开始和周结束日期
【发布时间】:2020-07-13 20:22:59
【问题描述】:


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

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

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

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

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

【问题讨论】:

  • 问题是,您将在新年前后有重叠的周数。您不能使用解决此问题的 ISO 8601 周数吗?
  • @Gustav,我刚刚用谷歌搜索了 ISO 8601 周数,以了解它的实际含义。关于我需要做什么和做什么,你有什么办法可以指导我朝着正确的方向前进吗?谢谢
  • 您不需要将周组合与年组合相关联。那么,2016 年第一周你想要什么? (1) 从 1 月 1 日星期五开始的部分周,还是从 1 月 3 日星期日开始的整周?使用 ISO 标准,2016 年 1 月 1 日是第 53 周。
  • @WayneG.Dunn:好的。据我了解,2016 年的第一周从 2016 年 1 月 3 日开始
  • 关键点是 ISO 8601 周从星期一开始。你能接受吗?

标签: ms-access vba ms-access-2010


【解决方案1】:

您可以使用 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

【讨论】:

  • 感谢您的意见。我正在尝试完全理解您提供的 VBA 功能。这是我第一次使用“公共功能”。您能否向我解释最后两行,即“FirstThursday”和“WeekStartDate”?因此,等式背后的逻辑是什么?此外,此代码是否进入我的 “周数” 组合框的更新后事件?或者简单地说,我如何使用该功能?对不起,我只是新手.. :-( 再次感谢
  • 感谢您的回复。 @Gord Thompson .. 尽管我真的希望我的一周从周日开始,但我认为我可以灵活地让它从周一开始(根据 ISO 8601)。感谢您的宝贵时间和出色的澄清。感谢您和这里的其他人帮助分享他们的丰富知识和专业知识。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-11-19
  • 2023-03-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多