vba sumifs越来越困惑date,错误的结果在四月

我跟着这个其他堆栈溢出的问题 ,是非常开明的,但是当我做了结果的理智检查,我在四月得到这个特殊的奇怪的行为,四月任何rev_date产生0的结果。我已经尝试不同的date和rev_dategrid_date间隔,但同样的事情发生,我可以指责系统dateconfiguration? 我错过了什么?

恕我直言,我宁愿使用优秀的公式,而不是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") _ , First_PD, "<=" & Format$(Application.WorksheetFunction.EoMonth(grid_date, 0), "dd mmm yyyy")) End Function 

我遵循你所拥有的,并得到正确的结果。 你很难将date设置编码为“dd mmm yyyy”,这是我在处理法语设置时发现的,不可识别的。 通过控制面板检查您设置的区域设置。 另外,请检查您的datemm / dd使用情况。 更改单元格格式以指示月份名称而不是“05”。 这样,你可以validation你没有扭转的日子和月份,每一个date真的是一个date。

在这里输入图像描述

不知道,但我认为在VBA中,您应该始终使用美国的date格式。 我通常将其定义为一个常量:
const kUsDate = "mm\/dd\/yyyy"
反斜线是转义字符。
作为一个certificate,试试这个:在B2中inputdate类似20/6/2011(法式),然后从VBA中运行代码

 Debug.Print ActiveCell.NumberFormat 

Excel将返回: m/d/yyyy CQFD
😉