1

所以问题几乎都在标题中。我只是想知道是否有一种简单的方法可以创建一个表格并在一年中的每一天都有一个字段,而无需执行 365 个条目。

我想要这样做的原因是为了更容易进行每周、每月和年初至今 (YTD) 的计算。理想情况下,我想要的是一组表来表示一年中的天数、月份,然后是年表。每个字段将在它们所代表的日期之后立即自动填写。

示例:在天数表中,我们看到相邻的字段 7/9/2012 和 7/10/2012。一旦内部时钟达到 2012 年 7 月 10 日,2012 年 7 月 9 日字段将填充从其他字段计算的数据。

几个月甚至几年都是如此。

4

2 回答 2

3

我只是想知道是否有一种简单的方法可以创建一个表格并在一年中的每一天都有一个字段,而无需执行 365 个条目。

尽管我不确定您的想法到底是什么,但我相当肯定正确的答案是“不,没有简单的方法”。:-)

创建一个包含 365 个字段的 Access 表(闰年呢?!)绝非易事。这是不可能的,因为 Access 表中的最大字段数是 255。

如果您愿意接受一年中符合该限制的部分时间,那么在我看来,每个日期都有一列的表格仍然是一个非常糟糕的主意。

OTOH,每个日期一行的日历表(“列很昂贵;行很便宜”)可能非常有用。我不明白你为什么显然拒绝了这种方法。

表的大小不应该是一个大问题:每年 <= 366 行,但那些可能是行。

如果问题是加载给定年份的所有日期的负担,那么这个负担可能非常微不足道。只需运行此LoadCalendar程序。the_date如果没有任何参数,它会将当前年份的日期加载到名为的表中的日期/时间字段中tblCalendar。您可以使用这些参数来替换不同的年份、表格或字段。

Public Sub LoadCalendar(Optional ByVal pYear As Integer, _
        Optional ByVal pTable As String = "tblCalendar", _
        Optional ByVal pField As String = "the_date")
    Dim db As DAO.Database
    Dim dte As Date
    Dim dteLast As Date
    Dim intYear As Integer
    Dim rs As DAO.Recordset
    Dim strMsg As String

On Error GoTo ErrorHandler

    intYear = IIf(pYear = 0, Year(Date), pYear)
    dte = DateSerial(intYear, 1, 1)
    dteLast = DateSerial(intYear, 12, 31)

    Set db = CurrentDb
    Set rs = db.OpenRecordset(pTable, dbOpenTable, dbAppendOnly)

    Do While dte <= dteLast
        rs.AddNew
        rs.Fields(pField).value = dte
        rs.Update
        dte = dte + 1
    Loop
    rs.Close

ExitHere:
    On Error GoTo 0
    Set rs = Nothing
    Set db = Nothing
    Exit Sub

ErrorHandler:
    strMsg = "Error " & Err.Number & " (" & Err.Description _
        & ") in procedure LoadCalendar"
    MsgBox strMsg
    GoTo ExitHere
End Sub

如果您想一次加载多年,只需在“立即”窗口中执行以下操作:

for yr = 2000 to 2012 : LoadCalendar yr : next
于 2012-07-09T18:51:37.873 回答
0

您不能从 excel 开始,单击并拖动所需的日期范围和列,然后在 excel 和数据库之间导入/建立连接吗?快速,简单,无需编码。我相信您可以链接到 Excel 工作表并使用 Excel 工作表中的日期函数在连接刷新时自动进行此更新,尽管我没有尝试链接。

PS我绝不是专家,如果有更好的做法,请告诉我。

于 2016-12-12T16:22:01.600 回答