问题
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