作者: C_Law 時間: 2018-6-30 17:22 標題: Excel VBA CDate 問題(已解決 3#)
本帖最後由 C_Law 於 2018-6-30 18:40 編輯
我用 Excel 去 Read 個 Text file,當中有個項目係日期,來源檔的格式係 dd-MM-yyyy,我需要轉做 date variable 然後去做其它計算,不過就發現有個問題:
- Dim SourceDate as string
- Dim myDate as date
- SourceDate="30-06-2018" ' read from source file
- myDate=CDate(SourceDate)
- ' use myDate to do something.....
CDate 識得當 () 內字串當成 dd-MM-yyyy 格式去處理,得出正確的 myDate 日期係 2018年6月30日。
不過,如果 SourceDate="01-07-2018",以我個 Source file 的格式應該係代表 2018年7月1日
但 CDate 就將()內的字串當成 MM-dd-yyyy 格式,結果錯誤地將 myDate 變成 2018年1月7日。
假設 SourceDate="aa-bb-cccc",似乎係:
如果 1<=aa<=12,CDate 會當係 MM-dd-yyyy
如果 aa>12 就當 dd-MM-yyyy。
另外試過 DateValue 亦係有相同結果。
除了在使用 CDate 前先將 SourceDate 由 "aa-bb-cccc" 改成 "bb-aa-cccc"之外,
有無方法硬性規定 CDate 用 dd-MM-yyyy 格式?
或者有無其它 Function 可以規定用 dd-MM-yyyy 格式將字串轉做 Date variable?
本來將 SourceDate 用 Mid/Left/Right 掉一掉次序都好簡單,不過更重要的問題係 CDate 所用的格式會否因為 Windows/Office 的地區語言設定而變?
我不想做出來個 File 拿去其他人的電腦開來使用時又得出其它結果。
作者: rfdingo 時間: 2018-6-30 17:46
try dateserial
https://msdn.microsoft.com/en-us ... dateserial-function
作者: C_Law 時間: 2018-6-30 18:39
Thanks~~~~
- myDate = DateSerial(CInt(Right(SourceDate, 4)), CInt(Mid(SourceDate, 4, 2)), CInt(Left(SourceDate, 2)))

