计算月数的第一天

时间:2012-12-07 03:39:02

标签: vba ms-access

我遇到了一个需要更多指导的问题。我有一个表单,允许用户输入开始日期和结束日期来表示合同的长度。我正在使用以下查询来计算每月金额:

SELECT t_Actuals.InvoiceAmount,
 (DateDiff("m",[StartDate],[EndDate])+1) AS [Contract Term],
 CCur(Round(([InvoiceAmount]/[Contract Term]),0)) AS MonthlyAmount
 FROM t_Actuals;

我们的副总裁希望在合同期限内(即从开始日期起11个月)预测MonthlyAmount。理想情况下,我想在合同期限内以MM-YYYY(01 / 2012,02,2012)格式分配MonthlyAmount,但是,不可否认,我不熟悉在Access之外使用Access的日期。查询网格。

无论如何,我一直在阅读有关DateSerial函数的信息,以查找该月的第一天,但​​是如何将其实现为循环以查找下一个36个月的第一个月的值并写入该日期为预计日期为fldDate和MonthlyAmount的表。

对不起,这是一个令人费解的问题。任何建议将不胜感激。提前感谢您的任何指示。

1 个答案:

答案 0 :(得分:1)

一个循环,用于查找下一个36个月的第一个月份的值,并将该日期写入表格,其中投影日期为fldDate和MonthlyAmount

考虑到第一个月的开始日期和月数,您可以使用DateAdd()函数确定需要插入的其余日期。将表作为DAO记录集打开,使用其.AddNew方法添加行,在字段中指定所需的值,然后调用.Update来存储行。

听起来像你的挑战是日期片,所以我勾勒出来并离开MonthlyAmount片段给你完成。

Public Sub LoadMonthStartDates(ByVal pFirstDate As Date, _
        ByVal pMonths As Long)
    Const cstrTable = "YourTableNameHere"
    Dim db As DAO.database
    Dim rs As DAO.Recordset
    Dim i As Long

    Set db = CurrentDb
    Set rs = db.OpenRecordset(cstrTable, dbOpenTable, dbAppendOnly)
    For i = 1 To pMonths
        rs.AddNew
        rs!fldDate = DateAdd("m", i - 1, pFirstDate)
        'rs!MonthlyAmount = <your calculated amount>
        rs.Update
    Next
    rs.Close
    Set rs = Nothing
    Set db = Nothing
End Sub