从4列功能获取最新日期

时间:2019-12-19 16:46:12

标签: vba ms-access

我有以下查询“ 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"))

但是,我仍然遇到相同的错误。

我在做什么错了?

2 个答案:

答案 0 :(得分:1)

大概是由于将Null传递给Date参数,导致出现类型不匹配

更改函数的签名以接受Variant值而不是Date-Variant可以容纳Null值。

在所有参数都定义为As Date的情况下,IsDate函数只能返回True

我建议不要假设date1是有效日期,并且将“最大日期”默认设置为CDate(0):如果记录中包含任何日期,它将大于该日期。

也请注意关闭您的If...End If区块。

答案 1 :(得分:1)

您可以在qryE上使用SQL来执行此操作,我的表是tblTesting,因此您将对其进行更改。

select equipment,MAX(d) as mxDate from
(
SELECT 
equipment,
E1_45J as d from tblTesting 
UNION
SELECT 
equipment,
E2_45J as d  from tblTesting 
UNION
SELECT 
equipment,
E3_45J as d  from tblTesting
UNION
SELECT 
equipment,
E4_45J as d  from tblTesting
)
group by equipment