Как заставить функцию Publi c возвращать значение SUM, исходя из текущего месяца в мс с доступом 2016 - PullRequest
0 голосов
/ 24 января 2020

У меня есть этот код, который я пытаюсь использовать, однако, когда запрос вызывает его, он возвращает пустой столбец данных. поэтому я пытаюсь добавить числовое значение в каждый столбец и каждый месяц добавляю новый столбец с математической формулой.

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 . не уверен, где я иду не так.

1 Ответ

0 голосов
/ 24 января 2020

Если вы хотите, чтобы функция в общем модуле обрабатывала данные из таблицы и возвращала значение для запроса, необходимо передать критерии для работы через аргумент и открыть набор записей данных. Что-то вроде:

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;

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...