VBA SUMIF对日期感到困惑-产生错误的结果

|| 下面的代码产生错误的结果。在工作表上,我们使用两种相同的日期格式(dd / mm / yyyy),但是当运行以下格式时,它似乎试图将rev_date解释为美国日期格式,同时将grid_date解释为正确的英国格式。 我们通过将工作表上的rev_date更改为American格式进行了测试,在这种情况下,它会产生正确的结果。 关于为什么需要将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
结束功能     
已邀请:
        当你这样做
First_PD, \">=\" & rev_date
还有这个
First_PD, \"<=\" & Application.WorksheetFunction.EoMonth(grid_date, 0))
您将两个“ 3”类型的变量(“ 4”和“ 5”)隐式强制为“ 6”类型。隐式强制是不正确的做法,这是为什么不正确的做法的一个非常典型的例子。您的日期应使用明确的格式(例如,
First_PD, \">=\" & Format$(rev_date,\"dd mmm yyyy\") 
以这种格式,2011年1月12日不能与2011年12月1日混淆。     
        我不确定日期格式为何会更改,但是从过去的谷歌搜索中可以肯定,VBA会将日期解释为美国日期,这可能是问题所在。 在您的职能中,您可以取每个日期并尝试将其格式化为英国日期格式吗?例:
Public Function GRIDSALES(rev_date As Date, grid_date As Date) As Double

Dim d1 as Date, d2 as Date

d1 = CDate(Format(rev_date, \"dd-mm-yyyy\"))
d2 = CDate(Format(grid_date, \"dd-mm-yyyy\"))

///rest of your code here...

End Function
    
        谢谢,我的错误就是这样。 但是我这样解决了
fil1 = \"<=\" & Month(rev_date) & \"/\" & Day(rev_date) & \"/\" & Year(rev_date)
    

要回复问题请先登录注册