所以这个问题几乎都在标题中。我只是想知道是否有一种简单的方法来创建一个表,并在一年中的每一天都有一个字段,而不需要365条目。
我想要这个的原因是为了使每周,每月和年初至今(YTD)计算更容易。理想情况下,我想要的是一组表来表示年度日,月和年表。每个字段将在它们代表的日期之后立即自动填充。
示例:在天数表中,我们看到相邻的字段7/9/2012和7/10/2012。一旦内部时钟到达7/10/2012,则7/9/2012字段将填充来自其他字段的数据计算结果。
同样会持续数月和数年。
我只是想知道是否有一种简单的方法来创建一个表,并在一年中的每一天都有一个字段,而不需要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
难道你不能在excel中启动,单击并拖动所需的日期范围和列,然后在excel和数据库之间导入/建立连接?快速,简单,无需编码。我相信您可以链接到Excel工作表并使用Excel工作表中的日期函数在连接刷新时自动进行此更新,尽管我还没有尝试过链接。
附:我绝不是专家,如果有更好的做法,请告诉我。