2013-04-04 66 views
0

我開發在Excel 2007 我想轉換日期(與時間)進入這些細胞成一種格式(美國)的兩套不同格式的特定細胞VBA更改事件。Excel 2007中VBA CDATE方法接受的格式

這裏是我的代碼檢查,如果輸入的日期是在兩個期望的格式之一。 crmdate是ActiveCell的字符串值:

If RegexServiceManager.test(crmdate) Then 
     outputDate = Format(CDate(crmdate), "MM/dd/yyyy hh:mm") 
     Application.EnableEvents = False 
     ActiveCell.Value = outputDate 
     ActiveCell.NumberFormat = "MM/dd/yyyy hh:mm" 
     Application.EnableEvents = True 
    ElseIf RegexSiebel.test(crmdate) Then 
     outputDate = CDate(crmdate) 
     Application.EnableEvents = False 
     ActiveCell.Value = outputDate 
     ActiveCell.NumberFormat = "MM/dd/yyyy hh:mm" 
     Application.EnableEvents = True 
    Else 
     MsgBox "Inapropriate date and time format" 
    End If 

RegexServiceManager檢查日期是在YYYY/MM/DD HH:MM:SS格式,並能正常工作。 RegexSiebel檢查日期是否爲int DD-MMM-YYYY HH:MM格式,這是麻煩開始的地方。

我得到outputDate = CDate(crmdate)線「類型不匹配」的錯誤。我已經移除了格式方法,就像上面的「If」中的格式一樣,以確認錯誤來自CDate。

任何人都可以提供意見嗎?也許CDate不識別DD-MMM-YYYY(例如:01-Jan-2013)格式?如果有的話,任何人都可以提出解決方法?

目標格式是MM/DD/YYYY HH:MM。

謝謝&最好的問候,

馬切伊

編輯:

outputDate是日期格式的!

+0

'CDATE()'會識別DD-MMM-YYYY HH:mm格式。試試cdate(format(now(),「dd-mmm-yyyy hh:mm」))'例如。 – markblandford 2013-04-04 15:20:48

+0

你好creamyegg,謝謝你的提示。我想我找到了鼻子。我會將其作爲答案發布。 – 2013-04-05 09:20:52

回答

1

我想我找到了答案。這有點傻,但上面的代碼不適用于波蘭的區域設置。它適用於美國(也可能是英國)的區域設置。

我也改變了outputDate到變型。

我結束了與此:

If RegexServiceManager.test(crmdate) Then 
     MsgBox "otputDate: " & TypeName(outputDate) & vbCrLf & "crmdate: " & TypeName(crmdate) 
     outputDate = CDate(crmdate) 
     MsgBox "otputDate: " & TypeName(outputDate) & vbCrLf & "crmdate: " & TypeName(crmdate) 
     Application.EnableEvents = False 
     ActiveCell.Value = outputDate 
     ActiveCell.NumberFormat = "MM/dd/yyyy hh:mm" 
     Application.EnableEvents = True 
    ElseIf RegexSiebel.test(crmdate) Then 
     MsgBox "otputDate: " & TypeName(outputDate) & vbCrLf & "crmdate: " & TypeName(crmdate) 
     outputDate = CDate(crmdate) 
     MsgBox "otputDate: " & TypeName(outputDate) & vbCrLf & "crmdate: " & TypeName(crmdate) 
     Application.EnableEvents = False 
     ActiveCell.Value = outputDate 
     ActiveCell.NumberFormat = "MM/dd/yyyy hh:mm" 
     Application.EnableEvents = True 
    Else 
     MsgBox "Inapropriate date and time format" 
    End If 

信息框只是爲了調試的目的。

在程序開始時檢測區域設置或者以更好的方式寫入以避免這種情況可能是明智的。 :)

希望這可以幫助別人。

謝謝&最好的問候,

+0

+1,這是一個寫得很好,有洞察力的答案,並確定了一個獨特的問題。 – FluffyKittens 2014-04-09 14:55:56