如何使公共函数基于当前月份在MS Access 2016中返回SUM值 [英] How to make a Public Function return SUM value based off current Month in ms access 2016

查看:60
本文介绍了如何使公共函数基于当前月份在MS Access 2016中返回SUM值的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

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

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

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.

推荐答案

如果您希望通用模块中的函数处理表中的数据并返回值以进行查询,则需要通过参数将条件传递给函数并打开一个数据记录集.像这样:

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

查询中的调用函数,例如: SELECT tablename.*, FCalcMnthALLTDISTRIB([ID]) AS OB_PLAN FROM tablename;

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

这篇关于如何使公共函数基于当前月份在MS Access 2016中返回SUM值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆