Access VBA查找最近未来日期函数返回12:00:00AM问题咨询
代码异常返回原因分析
1. 条件分支存在笔误
第三个判断分支的判断对象写错,你原本要判断date3是否符合要求,代码里却重复判断了date2:
' 错误写法 ElseIf date2 >= Date Then ClosestDate = date3
这就导致哪怕date1、date2都已过期,哪怕date3是未来日期,这个分支也永远无法触发。
2. 未显式设置函数返回值
VBA中函数要返回计算结果,必须在代码中给函数名赋值。你原代码末尾没有写UpcomingDates = ClosestDate,哪怕前面分支正确给ClosestDate赋了值,函数也只会返回Date类型的默认值。
3. 无兜底赋值逻辑
如果三个日期都早于当前系统日期(Date函数返回的是当前系统日期),所有判断分支都不会执行,ClosestDate变量没有被赋值。
VBA中Date类型的变量未显式赋值时,默认值为1899-12-30 00:00:00,显示出来就是你遇到的12:00:00AM。你测试用的三个日期都是2021年的,只要运行代码时的系统日期晚于2021年8月20日,就会触发这个问题。
修正后的代码参考
Public Function UpcomingDates(date1 As Date, date2 As Date, date3 As Date) As Date ' 可自定义无符合条件的未来日期时的默认返回值 Dim ClosestDate As Date ClosestDate = #12:00:00 AM# If date1 >= Date Then ClosestDate = date1 ElseIf date2 >= Date Then ClosestDate = date2 ElseIf date3 >= Date Then ClosestDate = date3 End If ' 显式设置函数返回值 UpcomingDates = ClosestDate End Function
内容的提问来源于stack exchange,提问作者Hunter Pozzebon
相关产品推荐
相关产品推荐

