下面的代码产生错误的结果。在工作表上,我们使用了两种相同的日期格式(dd/mm/yyyy),但是在运行以下时似乎试图将rev_date解释为美国日期格式,而将grid_date解释为正确的英国格式。VBA SUMIF对日期感到困惑 - 产生不正确的结果
我们通过将工作表上的rev_date更改为美式格式来测试这种情况,在这种情况下,它会产生正确的结果。
任何想法,为什么我们需要将rev_date更改为美式格式,我们宁愿保留它作为英国?
Public Function GRIDSALES(rev_date As Date, grid_date As Date) As Double
Dim Order_Type As Range
Dim Final_Price As Range
Dim PaidAlt As Range
Dim Excl_Rev As Range
Dim PAmount1 As Range
Dim PMethod1 As Range
Dim PAmount2 As Range
Dim PayDate2 As Range
Dim PMethod2 As Range
Dim Vstatus As Range
Dim Team As Range
Application.Volatile (True)
Set Order_Type = Sheets("KRONOS").Range("$D:$D")
Set Final_Price = Sheets("KRONOS").Range("$H:$H")
Set PaidAlt = Sheets("KRONOS").Range("$I:$I")
Set Excl_Rev = Sheets("KRONOS").Range("$K:$K")
Set PAmount1 = Sheets("KRONOS").Range("$O:$O")
Set First_PD = Sheets("KRONOS").Range("$Q:$Q")
Set PMethod1 = Sheets("KRONOS").Range("$R:$R")
Set PAmount2 = Sheets("KRONOS").Range("$T:$T")
Set PayDate2 = Sheets("KRONOS").Range("$V:$V")
Set PMethod2 = Sheets("KRONOS").Range("$W:$W")
Set Vstatus = Sheets("KRONOS").Range("$DL:$DL")
Set Team = Sheets("KRONOS").Range("$DO:$DO")
GRIDSALES1 = Application.WorksheetFunction.SumIfs(_
PAmount1 _
, Team, "<>9" _
, Vstatus, "<>rejected", Vstatus, "<>unverified" _
, Excl_Rev, "<>1" _
, PMethod1, "<>Credit" _
, PMethod1, "<>Amendment" _
, PMethod1, "<>Pre-paid" _
, First_PD, ">=" & rev_date _
, First_PD, "<=" & Application.WorksheetFunction.EoMonth(grid_date, 0))
GRIDSALES = GRIDSALES1
端功能
+1:关于隐性强制的良好教育解释。 – 2011-06-14 12:07:47