问题描述
||
我正在关注另一个“堆栈溢出”问题,这非常启发人,但是当我对结果进行合理性检查时,我在4月得到了这种特殊的异常行为,任何
rev_date
4月的结果都是0。 rev_date
和grid_date
间隔,但是发生相同的事情,我能怪系统日期配置吗?我想念什么?
恕我直言,我宁愿使用in-excel公式代替UDF,但是这种奇怪的结果在我的脑海里却很痒。
使用此UDF:
Public Function GRIDSALES(rev_date As Date,grid_date As Date) As Double
Dim Team As Range
Dim First_PD As Range
Dim PAmount1 As Range
Application.Volatile (True)
Set PAmount1 = Sheets(\"Sheet1\").Range(\"$F6:$F12\")
Set First_PD = Sheets(\"Sheet1\").Range(\"$E6:$E12\")
Set Team = Sheets(\"Sheet1\").Range(\"$D6:$D12\")
GRIDSALES = Application.WorksheetFunction.SumIfs( _
PAmount1 _,Team,\"<>9\" _,First_PD,\">=\" & Format$(rev_date,\"dd mmm yyyy\") _,\"<=\" & Format$(Application.WorksheetFunction.EoMonth(grid_date,0),\"dd mmm yyyy\"))
End Function
解决方法
我遵循了您所拥有的,并且得到了正确的结果。您正在将日期设置硬编码为\“ dd mmm yyyy \”,这是我在处理法语设置时发现的,无法识别。通过控制面板检查设置,了解您所拥有的区域设置。
另外,请检查您的日期mm / dd使用情况。更改单元格格式以指示月份名称,而不是\ '05 \'。这样一来,您可以验证自己没有反转日期和月份,而且每个日期实际上都是一个日期。
, 不确定,但是我认为在VBA中,您应该始终使用美国日期格式。我通常用一个常量定义它:
const kUsDate = \"mm\\/dd\\/yyyy\"
反斜杠是转义字符。
作为证明,请尝试以下操作:在B2中输入一个日期,例如20/6/2011(法语样式),然后从VBA中运行代码
Debug.Print ActiveCell.NumberFormat
Excel将返回:m/d/yyyy
CQFD
;-)