【问题标题】:First Day Of Month For Calculated Number Of Months计算月数的第一天
【发布时间】:2012-12-07 03:39:01
【问题描述】:

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

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 之外的日期处理方面经验不足查询网格。

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

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

【问题讨论】:

    标签: vba ms-access


    【解决方案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
    

    【讨论】:

    • Hans 再次感谢您的帮助。我很感激!
    猜你喜欢
    • 1970-01-01
    • 2020-05-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-08
    • 1970-01-01
    • 2015-12-11
    • 2010-09-18
    相关资源
    最近更新 更多