我的下面的代码返回“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”为空时如何处理??? 请提出答案。
答案 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!
错误
示例结果:
答案 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