2015-01-06 3 views
0

Мне нужна функция, которая будет автоматически суммироваться в столбцах с текущими месячными месяцами.Кумулятивная сумма FY на день в VBA

SQL, для запроса выглядит следующим образом:

SELECT "TBD" AS CATEGORY, tbl_SP.SYSTEM, tbl_SP.T3_UNIT AS ORG, tbl_SP.T1_UNIT AS Tier1_Unit, tbl_SP.UNIT_STAFF AS Tier2_Unit, tbl_SP.T3_UNIT AS Tier3_Unit, tbl_SP.OCT_O AS OCT, tbl_SP.NOV_O AS NOV, tbl_SP.DEC_O AS [DEC], tbl_SP.JAN_O AS JAN, tbl_SP.FEB_O AS FEB, tbl_SP.MAR_O AS MAR, tbl_SP.APR_O AS APR, tbl_SP.MAY_O AS MAY, tbl_SP.JUN_O AS JUN, tbl_SP.JUL_O AS JUL, tbl_SP.AUG_O AS AUG, tbl_SP.SEP_C AS SEP, Current_M([OCT_O],[NOV_O],[DEC_O],[JAN_O],[FEB_O],[MAR_O],[APR_O],[MAY_O],[JUN_O],[JUL_O],[AUG_O],[SEP_O]) AS Current_Month_SP, AcctType([MDEP],[T3_UNIT]) AS Acct_Type 
FROM tbl_SP; 

Например, это январь, поэтому я хочу, чтобы просуммировать эти столбцы

[OCT] + [NOV] + [DEC] + [JAN] 

Чтобы проверить это, я попытался оклейки это с псевдоним

Current_YTD_value: [OCT] + [NOV] + [DEC] + [JAN] 

Это работает.

Так почему же не работает, когда я использую его в функции? (я также попробовал его с типом как 'currency' за каждый месяц, но я получаю #Error!)

я прокомментировал другие попытки, но оставил относительный один показ.

Public Function Current_M( lJan As Long, lFeb As Long, lMar As Long, _ 
          lApr As Long, lMay As Long, lJun As Long, _ 
          lJul As Long, lAug As Long, lSep As Long, _ 
          lOct As Long, lNov As Long, lDec As Long) As Currency 

    Dim dtToday As Date 

    dtToday = Now() 

    Select Case Month(dtToday) 
     Case 1 
      Current_M = Nz(lOct, 0) + Nz(lNov, 0) + Nz(lDec, 0) + Nz(lJan, 0) 
     Case 2 
      Current_M = Nz(lOct, 0) + Nz(lNov, 0) + Nz(lDec, 0) + Nz(lJan, 0) + Nz(lJan, 0) 

    End Select 

End Function 
+0

Не могли бы вы показать запрос, в котором эта функция используется, пожалуйста? – PaulFrancis

+0

Дважды проверьте порядок полей, которые вы передаете функции, когда вы вызываете ее в запросе. Например, запрос дает функцию 'OCT_O' в качестве первого параметра ...' Current_M ([OCT_O] '. Однако первый параметр funtion имеет имя * lJan *. Это говорит о том, что поля могут не отображаться на правильные параметры. Я не думаю, что это причина ошибки, которую вы пытаетесь решить сейчас. – HansUp

+0

Спасибо.Я понял, что после того, как кто-то отредактировал формат моего кода, который первоначально начинался с Case 10 и закончился Case 9. Я предполагаю, что он был отредактирован для визуальной эффективности. Но я знаю об этом. – monty327

ответ

0

Я не понимаю, почему функция включает в себя Nz(), вот, например ...

Case 1 
    Current_M = Nz(lOct, 0) + Nz(lNov, 0) + Nz(lDec, 0) + Nz(lJan, 0) 

Это может быть ключом к проблеме, которую вы столкнулись.

С lOct, lNov, lDec, lJan были объявлены As Long, они не могут принять Null. Другими словами, Nz(lOct, 0) бесполезен, когда lOct никогда не может быть Null.

Если вы называете функции в открывшемся окне, как это ...

? Current_M(Null, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12) 

... Доступ пожалуется с ошибкой # 94, «Недопустимого использованием».

Однако, когда вы вызываете функцию из запроса, вы не видите это сообщение об ошибке. Вместо этого отображает Access #Error! при отображении запроса в представлении Datasheet.

Если вы хотите, чтобы функция принимает нулевые значения, объявить параметры, как Вариант вместо Long.

Это было мое лучшее предположение о причине вашей проблемы. Однако функция также генерирует ошибку, если вы загружаете ее текстовые значения, такие как «NA», которые не могут быть записаны как длинные целые числа.

+0

NZ предназначен для сохранения долгого значения от всех пройденных. Я не использовал вариант, потому что это ненужный большой след, если я могу убедиться, что я подаю параметр строгому требованию. Но мне, возможно, придется попробовать, что вы говорите, потому что ошибка не исчезнет. Тогда я должен буду понять, почему NZ не поймает его в этом коде. – monty327

+0

Хорошо. Это сработало. Спасибо. – monty327

Смежные вопросы