vba:日期函数返回“00:00:00”

时间:2013-02-27 11:42:09

标签: excel-vba vba excel

我的下面的代码返回“00:00:00”,如果传递的值“DateValue”为空

VBA:

Public Function forDate(ByVal DateValue As String) As Date
Dim DoDate As Date
If Not IsNull(DateValue) And DateValue <> "" Then
DoDate = CDate(FormatDateTime(DateValue, 1, 10))
forDate = DoDate
End If
End Function

“DateValue”为空时如何处理??? 请提出答案。

5 个答案:

答案 0 :(得分:1)

如果您使用Date而不是vbNull,则将Null设置为null有效(即无错误运行)。虽然它会返回#12/31/1899#而不是null本身。您可以稍后将该日期变量与该已知空值一起检查为伪空值。

或者您可以将其设置为将返回DateSerial(100, 1, 1)

的最短日期#1/1/100#

答案 1 :(得分:1)

这将处理空字符串和/或空字符串:

Public Function forDate(ByVal DateValue)
If IsDate(DateValue) Then
    forDate = CDate(DateValue)
Else
    forDate = CVErr(xlErrValue)
End If
End Function

注意我删除了变量的定义以允许正确传递NULL。当用作电子表格中的函数时,如果传递了无法表示为日期的字符串,该函数将返回#VALUE!错误

示例结果:
exaple

答案 2 :(得分:0)

我认为解决方案可能是使用变量参数|

声明函数
Public Function forDate(DateValue)

当VBA将NULL转换为String时,它不再是NULL ...

答案 3 :(得分:0)

请参阅解决方案的评论

Public Function forDate(ByVal DateValue As String) As Date ' will only accept string parameter

End Function

' below function is a variant and can accept string , null 
Public Function forDate(DateValue)
    Dim DoDate As Date
    If DateValue & "" <> "" Then 'this will handle null and empty string


        Else
            'will go here when null or empty string
            DateValue = Null
    End If
End Function

答案 4 :(得分:0)

Function IsNullDate(ByVal d As Date) As Boolean
    If d = CDate("00:00:00") Then
        IsNullDate = True
    Else
        IsNullDate = False
    End If
End Function

Sub CheckDate()
    Dim d1, d2 As Date
    d1 = Date
    d2 = Empty
    MsgBox "d1= " & IsNullDate(d1) & ",  d2=  " & IsNullDate(d2)
End Sub

运行CheckDate()具有以下输出:

d1 = False,d2 = True