How to make a Public Function return SUM value based off current Month in ms access 2016

二次信任 提交于 2020-01-25 08:05:13

问题


I have this code that i am trying to use however when the query calls it it returns a blank column of data. so on it i am trying to add the number value in each column and adding a new column each month with the math formula.

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

I am calling this function from an expression in the query with it creating its own field in the query. So in the query design view in a blank field i put in OB_PLAN: FCalcMnthALLTDISTRIB(). then in the Group By i selected SUM. not sure where i am going wrong.


回答1:


If you want a function in a general module to process data from a table and return value to query, then need to pass criteria to function via argument and open a recordset of data. Something like:

Public Function FCalcMnthALLTDISTRIB(intID As Integer) As Long
Dim dblOCT As Double
Dim dblNOV As Double
Dim dblDEC As Double
Dim dblJAN As Double
Dim dblFEB As Double
Dim dblMAR As Double
Dim dblAPR As Double
Dim dblMAY As Double
Dim dblJUN As Double
Dim dblJUL As Double
Dim dblAUG As Double
Dim dblSEP As Double
Dim rs As DAO.Recordset
Set rs = CurrentDb.OpenRecordset("SELECT * FROM tablename WHERE ID=" & intID)

With rs
    dblOCT = Nz(!OCT, 0)
    dblNOV = Nz(!OCT, 0) + Nz(!NOV, 0)
    dblDEC = Nz(!OCT, 0) + Nz(!NOV, 0) + Nz(!DEC, 0)
    dblJAN = Nz(!OCT, 0) + Nz(!NOV, 0) + Nz(!DEC, 0) + Nz(!JAN, 0)
    dblFEB = Nz(!OCT, 0) + Nz(!NOV, 0) + Nz(!DEC, 0) + Nz(!JAN, 0) + Nz(!FEB, 0)
    dblMAR = Nz(!OCT, 0) + Nz(!NOV, 0) + Nz(!DEC, 0) + Nz(!JAN, 0) + Nz(!FEB, 0) + Nz(!MAR, 0)
    dblAPR = Nz(!OCT, 0) + Nz(!NOV, 0) + Nz(!DEC, 0) + Nz(!JAN, 0) + Nz(!FEB, 0) + Nz(!MAR, 0) + Nz(!APR, 0)
    dblMAY = Nz(!OCT, 0) + Nz(!NOV, 0) + Nz(!DEC, 0) + Nz(!JAN, 0) + Nz(!FEB, 0) + Nz(!MAR, 0) + Nz(!APR, 0) + Nz(!MAY, 0)
    dblJUN = 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)
    dblJUL = 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)
    dblAUG = 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)
    dblSEP = 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 Month(Date))
    Case 10
        FCalcMnthALLTDISTRIB = dblOCT
    Case 11
        FCalcMnthALLTDISTRIB = dblNOV
    Case 12
        FCalcMnthALLTDISTRIB = dblDEC
    Case 1
        FCalcMnthALLTDISTRIB = dblJAN
    Case 2
        FCalcMnthALLTDISTRIB = dblFEB
    Case 3
        FCalcMnthALLTDISTRIB = dblMAR
    Case 4
        FCalcMnthALLTDISTRIB = dblAPR
    Case 5
        FCalcMnthALLTDISTRIB = dblMAY
    Case 6
        FCalcMnthALLTDISTRIB = dblJUN
    Case 7
        FCalcMnthALLTDISTRIB = dblJUL
    Case 8
        FCalcMnthALLTDISTRIB = dblAUG
    Case 9
        FCalcMnthALLTDISTRIB = dblSEP
End Select
End Function

Call function in query like: SELECT tablename.*, FCalcMnthALLTDISTRIB([ID]) AS OB_PLAN FROM tablename;



来源:https://stackoverflow.com/questions/59902488/how-to-make-a-public-function-return-sum-value-based-off-current-month-in-ms-acc

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!