Sql 截至目前为止,每月累计VBA金额

Sql 截至目前为止,每月累计VBA金额,sql,ms-access,vba,Sql,Ms Access,Vba,我需要一个函数,它将自动在一列中求和会计年度到日期月份的值 查询的SQL如下所示: SELECT "TBD" AS CATEGORY, tbl_SP.SYSTEM, tbl_SP.T3_UNIT AS ORG, tbl_SP.T1_UNIT AS Tier1_Unit, tbl_SP.UNIT_STAFF AS Tier2_Unit, tbl_SP.T3_UNIT AS Tier3_Unit, tbl_SP.OCT_O AS OCT, tbl_SP.NOV_O AS NOV, tbl_SP.DE

我需要一个函数,它将自动在一列中求和会计年度到日期月份的值

查询的SQL如下所示:

SELECT "TBD" AS CATEGORY, tbl_SP.SYSTEM, tbl_SP.T3_UNIT AS ORG, tbl_SP.T1_UNIT AS Tier1_Unit, tbl_SP.UNIT_STAFF AS Tier2_Unit, tbl_SP.T3_UNIT AS Tier3_Unit, tbl_SP.OCT_O AS OCT, tbl_SP.NOV_O AS NOV, tbl_SP.DEC_O AS [DEC], tbl_SP.JAN_O AS JAN, tbl_SP.FEB_O AS FEB, tbl_SP.MAR_O AS MAR, tbl_SP.APR_O AS APR, tbl_SP.MAY_O AS MAY, tbl_SP.JUN_O AS JUN, tbl_SP.JUL_O AS JUL, tbl_SP.AUG_O AS AUG, tbl_SP.SEP_C AS SEP, Current_M([OCT_O],[NOV_O],[DEC_O],[JAN_O],[FEB_O],[MAR_O],[APR_O],[MAY_O],[JUN_O],[JUL_O],[AUG_O],[SEP_O]) AS Current_Month_SP, AcctType([MDEP],[T3_UNIT]) AS Acct_Type
FROM tbl_SP;
例如,现在是一月,所以我想对这些列求和

[OCT] + [NOV] + [DEC] + [JAN]
为了测试它,我尝试用别名粘贴它

Current_YTD_value: [OCT] + [NOV] + [DEC] + [JAN]
它起作用了

那么,当我在函数中使用它时,为什么下面的代码不起作用呢? (我每个月都尝试使用
'currency'
类型,但我得到一个#错误!)

我已经注释掉了其他尝试,但是留下了相对的一个

Public Function Current_M(  lJan As Long, lFeb As Long, lMar As Long, _
                            lApr As Long, lMay As Long, lJun As Long, _
                            lJul As Long, lAug As Long, lSep As Long, _
                            lOct As Long, lNov As Long, lDec As Long) As Currency

    Dim dtToday As Date

    dtToday = Now()

    Select Case Month(dtToday)
        Case 1
            Current_M = Nz(lOct, 0) + Nz(lNov, 0) + Nz(lDec, 0) + Nz(lJan, 0)
        Case 2
            Current_M = Nz(lOct, 0) + Nz(lNov, 0) + Nz(lDec, 0) + Nz(lJan, 0) + Nz(lJan, 0)

    End Select

End Function

我不明白为什么函数包含
Nz()
,例如这里

案例1
电流M=Nz(lOct,0)+Nz(lNov,0)+Nz(lDec,0)+Nz(lJan,0)
这可能是你所面临问题的线索

由于lOct、lNov、lDec和lJan都声明为
,只要
,它们就不能接受Null。换句话说,
Nz(lOct,0)
在lOct不能为Null时是无用的

如果你像这样在即时窗口中调用你的函数

?当前值(空、2、3、4、5、6、7、8、9、10、11、12)
。。。Access将投诉错误#94,“无效使用Null”

但是,当您从查询中调用函数时,不会看到该错误消息。相反,Access显示#错误在数据表视图中显示查询时

如果希望函数接受空值,请将参数声明为Variant而不是Long


这是我对你问题原因的最好猜测。但是,如果您向函数输入文本值,例如“NA”,它不能转换为长整数,则该函数也会生成错误。

请显示使用该函数的查询,好吗?在查询中调用该函数时,请仔细检查传递给该函数的字段的顺序。例如,查询将函数
OCT\u O
作为其第一个参数<代码>当前值([10月0日]
。但是函数的第一个参数名为lJan。这表明字段可能没有映射到正确的参数。但我不认为这是您现在试图解决的错误的原因。谢谢。我意识到,在有人编辑了我的代码格式后,最初从案例10开始,以案例9结束。我ne它是为了视觉效果而编辑的。但我知道这一点。NZ旨在保留传递的任何内容的长值。我没有使用variant,因为如果我能确保将参数输入到严格的要求中,这是一个不必要的大足迹。但是我可能必须尝试你说的,因为错误不会消失。然后我将理解为什么NZ在这段代码中没有捕捉到它。