如何根据当前月份(以毫秒为单位,在ms access 2016中如何使公共函数返回SUM值

问题描述 投票:0回答:1

我有我要使用的这段代码,但是当查询调用它时,它将返回一个空白的数据列。因此,我正在尝试在每列中添加数字值,并每月使用数学公式添加一个新列。

Option Explicit

Public Function FCalcMnthALLTDISTRIB()
Dim OCT As String
Dim NOV As String
Dim DEC As String
Dim JAN As String
Dim FEB As String
Dim MAR As String
Dim APR As String
Dim MAY As String
Dim JUN As String
Dim JUL As String
Dim AUG As String
Dim SEP As String

OCT = Nz([OCT], 0)
NOV = Nz([OCT], 0) + Nz([NOV], 0)
DEC = Nz([OCT], 0) + Nz([NOV], 0) + Nz([DEC], 0)
JAN = Nz([OCT], 0) + Nz([NOV], 0) + Nz([DEC], 0) + Nz([JAN], 0)
FEB = Nz([OCT], 0) + Nz([NOV], 0) + Nz([DEC], 0) + Nz([JAN], 0) + Nz([FEB], 0)
MAR = Nz([OCT], 0) + Nz([NOV], 0) + Nz([DEC], 0) + Nz([JAN], 0) + Nz([FEB], 0) + Nz([MAR], 0)
APR = Nz([OCT], 0) + Nz([NOV], 0) + Nz([DEC], 0) + Nz([JAN], 0) + Nz([FEB], 0) + Nz([MAR], 0) + Nz([APR], 0)
MAY = Nz([OCT], 0) + Nz([NOV], 0) + Nz([DEC], 0) + Nz([JAN], 0) + Nz([FEB], 0) + Nz([MAR], 0) + Nz([APR], 0) + Nz([MAY], 0)
JUN = Nz([OCT], 0) + Nz([NOV], 0) + Nz([DEC], 0) + Nz([JAN], 0) + Nz([FEB], 0) + Nz([MAR], 0) + Nz([APR], 0) + Nz([MAY], 0) + Nz([JUN], 0)
JUL = Nz([OCT], 0) + Nz([NOV], 0) + Nz([DEC], 0) + Nz([JAN], 0) + Nz([FEB], 0) + Nz([MAR], 0) + Nz([APR], 0) + Nz([MAY], 0) + Nz([JUN], 0) + Nz([JUL], 0)
AUG = Nz([OCT], 0) + Nz([NOV], 0) + Nz([DEC], 0) + Nz([JAN], 0) + Nz([FEB], 0) + Nz([MAR], 0) + Nz([APR], 0) + Nz([MAY], 0) + Nz([JUN], 0) + Nz([JUL], 0) + Nz([AUG], 0)
SEP = Nz([OCT], 0) + Nz([NOV], 0) + Nz([DEC], 0) + Nz([JAN], 0) + Nz([FEB], 0) + Nz([MAR], 0) + Nz([APR], 0) + Nz([MAY], 0) + Nz([JUN], 0) + Nz([JUL], 0) + Nz([AUG], 0) + Nz([SEP], 0)


If MonthName(Month(Date), False) = "October" Then
    FCalcMnthALLTDISTRIB = OCT
    ElseIf MonthName(Month(Date), False) = "November" Then
        FCalcMnthALLTDISTRIB = NOV
        ElseIf MonthName(Month(Date), False) = "December" Then
            FCalcMnthALLTDISTRIB = DEC
            ElseIf MonthName(Month(Date), False) = "January" Then
                FCalcMnthALLTDISTRIB = JAN
                ElseIf MonthName(Month(Date), False) = "February" Then
                    FCalcMnthALLTDISTRIB = FEB
                    ElseIf MonthName(Month(Date), False) = "March" Then
                        FCalcMnthALLTDISTRIB = MAR
                        ElseIf MonthName(Month(Date), False) = "April" Then
                            FCalcMnthALLTDISTRIB = APR
                            ElseIf MonthName(Month(Date), False) = "May" Then
                                FCalcMnthALLTDISTRIB = MAY
                                ElseIf MonthName(Month(Date), False) = "June" Then
                                    FCalcMnthALLTDISTRIB = JUN
                                    ElseIf MonthName(Month(Date), False) = "July" Then
                                        FCalcMnthALLTDISTRIB = JUL
                                        ElseIf MonthName(Month(Date), False) = "August" Then
                                            FCalcMnthALLTDISTRIB = AUG
                                            ElseIf MonthName(Month(Date), False) = "September" Then
                                                FCalcMnthALLTDISTRIB = SEP

End If

End Function

我正在查询中的表达式中调用此函数,并在查询中创建自己的字段。因此,在查询设计视图的空白字段中,我放入了[[OB_PLAN:FCalcMnthALLTDISTRIB()。然后在“分组依据”中选择SUM。不知道我要去哪里错了。

ms-access access-vba access
1个回答
0
投票
如果要让通用模块中的函数处理表中的数据并返回值以进行查询,则需要通过参数将条件传递给函数并打开数据记录集。类似于:

Public Function FCalcMnthALLTDISTRIB(intID As Integer) As Long Dim intOCT As Integer Dim intNOV As Integer Dim intDEC As Integer Dim intJAN As Integer Dim intFEB As Integer Dim intMAR As Integer Dim intAPR As Integer Dim intMAY As Integer Dim intJUN As Integer Dim intJUL As Integer Dim intAUG As Integer Dim intSEP As Integer Dim rs As DAO.Recordset Set rs = CurrentDb.OpenRecordset("SELECT * FROM tablename WHERE ID=" & intID) With rs intOCT = Nz(!OCT, 0) intNOV = Nz(!OCT, 0) + Nz(!NOV, 0) intDEC = Nz(!OCT, 0) + Nz(!NOV, 0) + Nz(!DEC, 0) intJAN = Nz(!OCT, 0) + Nz(!NOV, 0) + Nz(!DEC, 0) + Nz(!JAN, 0) intFEB = Nz(!OCT, 0) + Nz(!NOV, 0) + Nz(!DEC, 0) + Nz(!JAN, 0) + Nz(!FEB, 0) intMAR = Nz(!OCT, 0) + Nz(!NOV, 0) + Nz(!DEC, 0) + Nz(!JAN, 0) + Nz(!FEB, 0) + Nz(!MAR, 0) intAPR = Nz(!OCT, 0) + Nz(!NOV, 0) + Nz(!DEC, 0) + Nz(!JAN, 0) + Nz(!FEB, 0) + Nz(!MAR, 0) + Nz(!APR, 0) intMAY = Nz(!OCT, 0) + Nz(!NOV, 0) + Nz(!DEC, 0) + Nz(!JAN, 0) + Nz(!FEB, 0) + Nz(!MAR, 0) + Nz(!APR, 0) + Nz(!MAY, 0) intJUN = Nz(!OCT, 0) + Nz(!NOV, 0) + Nz(!DEC, 0) + Nz(!JAN, 0) + Nz(!FEB, 0) + Nz(!MAR, 0) + Nz(!APR, 0) + Nz(!MAY, 0) + Nz(!JUN, 0) intJUL = Nz(!OCT, 0) + Nz(!NOV, 0) + Nz(!DEC, 0) + Nz(!JAN, 0) + Nz(!FEB, 0) + Nz(!MAR, 0) + Nz(!APR, 0) + Nz(!MAY, 0) + Nz(!JUN, 0) + Nz(!JUL, 0) intAUG = Nz(!OCT, 0) + Nz(!NOV, 0) + Nz(!DEC, 0) + Nz(!JAN, 0) + Nz(!FEB, 0) + Nz(!MAR, 0) + Nz(!APR, 0) + Nz(!MAY, 0) + Nz(!JUN, 0) + Nz(!JUL, 0) + Nz(!AUG, 0) intSEP = Nz(!OCT, 0) + Nz(!NOV, 0) + Nz(!DEC, 0) + Nz(!JAN, 0) + Nz(!FEB, 0) + Nz(!MAR, 0) + Nz(!APR, 0) + Nz(!MAY, 0) + Nz(!JUN, 0) + Nz(!JUL, 0) + Nz(!AUG, 0) + Nz(!SEP, 0) End With Select Case MonthName(Month(Date)) Case "October" FCalcMnthALLTDISTRIB = intOCT Case "November" FCalcMnthALLTDISTRIB = intNOV Case "December" FCalcMnthALLTDISTRIB = intDEC Case "January" FCalcMnthALLTDISTRIB = intJAN Case "February" FCalcMnthALLTDISTRIB = intFEB Case "March" FCalcMnthALLTDISTRIB = intMAR Case "April" FCalcMnthALLTDISTRIB = intAPR Case "May" FCalcMnthALLTDISTRIB = intMAY Case "June" FCalcMnthALLTDISTRIB = intJUN Case "July" FCalcMnthALLTDISTRIB = intJUL Case "August" FCalcMnthALLTDISTRIB = intAUG Case "September" FCalcMnthALLTDISTRIB = intSEP End Select End Function

在查询中调用函数,如:SELECT tablename.*, FCalcMnthALLTDISTRIB([ID]) AS OB_PLAN FROM tablename;
© www.soinside.com 2019 - 2024. All rights reserved.