2011-06-13 94 views
2
Public Function GRIDSALES(rev_date As Date, grid_date As Date) As Variant 

     Application.Volatile (True) 

       Set Final_Price = Sheets("KRONOS").Range("$H:$H") 
       Set Team = Sheets("KRONOS").Range("$DO:$DO") 
       Set First_PD = Sheets("KRONOS").Range("$Q:$Q") 

       GRIDSALES1 = Application.WorksheetFunction.SumIfs(_ 
           Final_Price _ 
           , Team, "<>9" _ 
          , First_PD, ">=" & rev_date, First_PD, "<=EoMonth(" & grid_date & ")") 

     End Function 

上面的VBA代码符合没有任何错误,但不会生成答案。我试图创建一个UDF,在两个日期rev_dategrid_date之间为所有销售团队(不包括团队9)总结最终价格。我错过了什么?VBA中的SUMIF功能无法正常工作

+0

我会打破它然后查看'GRIDSALES1'仅适用于'Team <> 9'这些值,然后添加'First_PD'标准并查看是否得到结果,然后将所有3个结合在一起。此外,请检查调试器中出现的“>”=“&rev_date”(在执行过程中,突出显示编辑器中的分组,右键单击和“添加监视”)以确保它有意义。为''<= EoMonth(“&grid_date&”)“'部分做相同的操作。 – jonsca 2011-06-13 11:15:20

回答

2

鄙视“硬编码”的SUMIF的objetive范围(?反模式)的1 GRIDSALES1和"<=EoMonth("代替Application.WorksheetFunction.EoMonth(grid_date, 0),即sunifs是有结果的两倍,应该为:

Function ASALES(rev_date As Date, grid_date As Date) As Double 

Dim Final_Price As Range 
Dim Team As Range 
Dim First_PD As Range 
Application.Volatile (True) 

Set Final_Price = Sheets("Sheet1").Range("H5:$H11") 
Set Team = Sheets("Sheet1").Range("E5:E11") 
Set First_PD = Sheets("Sheet1").Range("F5:F11") 

ASALES = Application.WorksheetFunction.SumIfs(_ 
    Final_Price _ 
    , Team, "<>9" _ 
    , First_PD, ">=" & rev_date _ 
    , First_PD, "<=" & Application.WorksheetFunction.EoMonth(grid_date, 0)) 


End Function 
+0

这似乎在产生实际结果方面起作用。不幸的是,所产生的结果是正确的 - 它超过了我们应该知道的两倍。我不太确定你是否认为#it的结果应该是'double',或者至少是什么原因造成的。 预先感谢您的时间。 显然我不能显示我们正在使用的所有数字,但你能看到其他的错误吗?任何可能 – James 2011-06-13 14:53:55

+0

@James加倍是处理的数据类型,如果我正确的是双精度。 – Alen 2011-06-13 15:38:36

1

您的输出应该是函数名称。将GRIDSALES1更改为GRIDSALES。

+0

嗨,我们已经尝试过这一个,但尽管改变它仍然无法正常工作。现在试着回答上述问题。 尽管感谢您的帮助。 – James 2011-06-13 14:27:14

+0

@詹姆斯,是的,我害怕这一点。我认为下一步是遵循@Alen的建议,即您必须使用Application.Worksheetfunction.EOMONTH在您的代码中调用EOMONTH。 – Excellll 2011-06-13 14:42:26

+0

这有助于我们取得一些进展,谢谢。见上面的新问题! – James 2011-06-13 14:56:00