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

如何解决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\",\"<>unverified\" _,Excl_Rev,\"<>1\" _,PMethod1,\"<>Credit\" _,\"<>Amendment\" _,\"<>Pre-paid\" _,First_PD,\">=\" & rev_date _,\"<=\" & 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)
    

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?