[操作疑難] Excel VBA CDate 問題(已解決 3#)

本帖最後由 C_Law 於 2018-6-30 18:40 編輯

我用 Excel 去 Read 個 Text file,當中有個項目係日期,來源檔的格式係 dd-MM-yyyy,我需要轉做 date variable 然後去做其它計算,不過就發現有個問題:
  1. Dim SourceDate as string
  2. Dim myDate as date

  3. SourceDate="30-06-2018"    ' read from source file
  4. myDate=CDate(SourceDate)
  5. ' use myDate to do something.....
複製代碼
如果 SourceDate="30-06-2018",以我個 Source file 的格式應該係代表 2018年6月30日。
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 拿去其他人的電腦開來使用時又得出其它結果。

TOP

try dateserial
rfdingo 發表於 2018/6/30 17:46


Thanks~~~~
  1. myDate = DateSerial(CInt(Right(SourceDate, 4)), CInt(Mid(SourceDate, 4, 2)), CInt(Left(SourceDate, 2)))
複製代碼

TOP