vba - 从 4 列函数获取最新日期

标签 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"))

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

我做错了什么?

最佳答案

可能您会遇到类型不匹配的情况,因为您将 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/

相关文章:

excel - 如何将这些代码块截断为一个嵌套的 for 循环?

vba - Excel VBA 在 50 个工作表中运行宏

ms-access - 强制报告页脚位于页面底部

sql - 需要远程或基于 Web 的 MS Access SQL 工具(例如类似于 PhpMyAdmin,但基于 ColdFusion)

vba - 仅显示特定的 PivotItems

excel - 引用范围来生成 Outlook 电子邮件时出现运行时错误 '91'

vba - Excel VBA 将变量列范围转置为变量行

mysql - 使用 ActiveRecord 将数据从 MS Access DB 导入 MySQL DB

sql - 使用日期时间字段选择昨天的记录

ms-access - 从 Microsoft Access 计算字符串的 MD5