【问题标题】:Upcoming Date Function - Fixing Errors即将推出的日期功能 - 修复错误
【发布时间】:2021-08-24 01:08:28
【问题描述】:

我有以下代码:

Public Function NextDate(date1 As Date, date2 As Date, date3 As Date) As Date

Dim ClosestDate As Date

If date1 >= Date Then
    ClosestDate = date1
ElseIf date2 >= Date Then
    ClosestDate = date2
ElseIf date3 >= Date Then
    ClosestDate = date3
End If

NextDate = Format(ClosestDate, "mm/dd/yyyy")

End Function

其中 date1

有时没有在函数中输入日期并返回#Error

有时输入到函数中的所有日期都是过去的日期,它会返回 12:00:00am

我必须在我的代码中输入什么,以便如果没有日期或所有日期都在过去,则函数不返回任何内容(单元格看起来是空白的)

*我在 MS Access 中使用 VBA

【问题讨论】:

    标签: vba ms-access


    【解决方案1】:

    由于参数被声明为 Date 类型,传递 Null 或空字符串会导致错误。并且由于函数被声明为 Date 它必须返回一个日期。此外,ClosestDate 变量被声明为 Date,因此不能为 Null。只有 Variant 类型可以持有 Null。如果您想允许 Null,请不要将任何声明为 Date。然后修改最后一行:

    If Not IsNull(ClosesDateNextDate) Then NextDate = Format(ClosestDate, "mm/dd/yyyy")

    Format() 可能甚至没有必要——只需在 If Then Else 块中设置 NextDate 并消除 ClosestDate 变量以及最后一行。 Format() 返回一个字符串,而不是真正的日期,如果没有提供值,Variant 类型默认为空字符串。如果后续计算需要结果,则字符串结果可能会导致问题。在 If 块之前将 NextDate 设置为 Null 或使用 Else 行。以下函数返回真实日期或 Null。

    Public Function NextDate(date1, date2, date3)
    If date1 >= Date Then
        NextDate = date1
    ElseIf date2 >= Date Then
        NextDate = date2
    ElseIf date3 >= Date Then
        NextDate = date3
    Else
        NextDate = Null
    End If
    End Function
    

    【讨论】:

    • 我建议将参数和返回值显式声明为Variant,以明确没有忘记指定类型并将它们标记为ByValue,因为ByRef将是默认值,此处不需要:Public Function NextDate(ByVal date1 As Variant, ByVal date2 As Variant, ByVal date3 As Variant) As Variant
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-29
    • 1970-01-01
    • 2021-01-14
    • 2021-06-12
    • 1970-01-01
    • 2021-10-21
    • 1970-01-01
    相关资源
    最近更新 更多