在使用CDate 进行转换之前,请尝试将字符串转换为更接近传统的 EN-US 格式。
Dim Data1 As String, Data2 As Date
Data1 = Replace("01.01.2015 01:01", Chr(46), Chr(47))
Data2 = CDate(Data1)
Debug.Print Data2
fwiw,提供从 MDY 和 DMY 格式产生不明确结果的示例数据通常不是一个好主意。这可能是 VBA 中的一个问题。提供绝对是其中之一的数据。
对于包含模糊 DMY/MDY 数据的字符串,例如 "02.01.2015 01:01",这是一种更好的方法。
Dim Data1 As String, Data2 As Date, vDATE As Variant, vTIME As Variant
Data1 = "02.01.2015 01:01"
vTIME = Split(Data1, Chr(32))
vDATE = Split(vTIME(0), Chr(46))
Data2 = DateSerial(vDATE(2), vDATE(1), vDATE(0)) + TimeValue(vTIME(1))
Debug.Print Data2
VBA 使用第一种方法进行“最佳猜测”,结果错误为 2015 年 2 月 1 日。第二种方法更明确,并达到 2015 年 1 月 2 日的正确答案(假设已知 DMY 日期格式)。简而言之,约会并不总是足够的。确保它是正确的日期。