2011-06-13 93 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