我有以下查询“qryE”。
Equipment E1_45J E2_45J E3_45J E4_45J
400 2019-03-25 2019-10-07
401 2019-04-01 2019-10-23
402 2019-02-14 2019-08-25 2019-11-11
403 2019-02-11 2019-09-05 2019-11-25
我创建了一个函数来返回这 4 列之间的最新值:
Function getmaxdate(dteDate1 As Date, dteDate2 As Date, dteDate3 As Date, dteDate4 As Date) As Date
Dim dteMaxDate As Date
dteMaxDate = dteDate1
Debug.Print dteDate2
If IsDate(dteDate2) Then
If dteDate2 > dteMaxDate Then dteMaxDate = dteDate2
If IsDate(dteDate3) Then
If dteDate3 > dteMaxDate Then dteMaxDate = dteDate3
If IsDate(dteDate4) Then
If dteDate4 > dteMaxDate Then dteMaxDate = dteDate4
getmaxdate = dteMaxDate
End Function
我想要实现的是:
Equipment 45J
400 2019-10-07
401 2019-10-23
402 2019-11-11
403 2019-11-25
但是,当我使用 45J 运行查询时:
getmaxdate([E1_45J],[E2_45J],[E3_45J],[E4_45J])
我发现条件表达式中的数据类型不匹配。
我尝试使用以下方式强制查询值的格式:
45J: getmaxdate(Format([E1_45J], "yyyy/mm/dd"),Format([E2_45J], "yyyy/mm/dd"),Format([E3_45J], "yyyy/mm/dd"),Format([E4_45J], "yyyy/mm/dd"))
但是,我仍然遇到同样的错误。
我做错了什么?
最佳答案
可能您会遇到类型不匹配的情况,因为您将 Null
传递给 Date
参数,而您无法执行此操作那个。
更改函数的签名以接受 Variant
值而不是 Date
- Variant
可以保存 Null
值.
将所有参数定义为 As Date
后,IsDate
函数只能返回 True
。
我建议不要假设 date1
是有效日期,并将“最大日期”默认为 CDate(0)
:如果记录中有任何日期,它会比这个更大。
也要小心关闭 If...End If
block 。
关于vba - 从 4 列函数获取最新日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59413848/