2013-02-27 197 views
1

我下面的代碼返回 「00:00:00」,如果傳遞的值 「DateValue將」 爲空VBA:日期函數返回 「00:00:00」

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

書面,你的函數沒有定義你想要的情況下的返回值 - 你至少需要一個'else'語句嗎?,,,, – Floris 2013-02-27 11:50:14

+0

你的意思是當'DateValue'**是''空'或者你的意思是當變量'DateValue'是四個字母詞「空」? – CaBieberach 2013-02-27 12:43:56

+0

@CaBieberach:當「DateValue」變量的值爲「Null」時。 – user2002774 2013-02-27 13:24:20

回答

0

我認爲解決方案可能是聲明具有變量參數的函數|

Public Function forDate(DateValue) 

當VBA轉換NULL爲字符串,它不再是空...

+0

弗洛里斯:不,我不能這樣做,它必須是日期格式。我有其他格式的問題。 – user2002774 2013-02-27 11:53:33

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 
+0

user206:我試試這個,我得到了「無效使用Null」的錯誤。 – user2002774 2013-02-27 11:52:50

+0

確保你的函數接受null並返回null ...它會工作。 – 2013-02-27 11:54:44

+0

你不能使用'='來分配NULL - 你必須'設置'它。不知道你可以設置日期爲空,雖然... – Floris 2013-02-27 11:58:13

0

設置Date爲null是有效的意見(即沒有將運行錯誤)提供您使用vbNull而不是Null。雖然它將返回#12/31/1899#而不是null本身。您可以稍後檢查您的日期變量與已知的空值是否爲您的僞空值。

或者你可以將其設置爲最小日期DateSerial(100, 1, 1)將返回#1/1/100#

+1

'vbNull'與'Null'不一樣。 'vbNull'是一個VBA內部常量,值爲1. – CaBieberach 2013-02-27 13:48:02

+0

@CaBieberach你是對的!(有點誤導......),那麼DateSerial選項可能是最好的,如果他堅持要返回一個「日期」 – Brad 2013-02-27 14:15:47

1

這將處理空和/或空字符串:

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

通知我已刪除變量的定義,以允許NULL才能正確傳遞。作爲在電子表格功能使用時,如果不能表示爲一個日期字符串傳遞

示例結果的函數會返回一個#VALUE!錯誤:
exaple