【问题标题】:Convert String to Date VBA将字符串转换为日期 VBA
【发布时间】:2015-08-04 09:24:42
【问题描述】:

我有一个带有日期和时间的字符串,格式为“DD.MM.YYYY HH:mm”,我想将其转换为日期(无论格式如何)。

我正在使用这个测试代码,但我找不到它为什么不起作用:

Dim Data1 As String, Data2 As Date    
Data1 = "01.01.2015 01:01"
Data2 = CDate(Data1)

【问题讨论】:

标签: vba excel


【解决方案1】:

在使用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 日期格式)。简而言之,约会并不总是足够的。确保它是正确的日期。

【讨论】:

  • @PedroGranate - 查看我的编辑和推理。您可能使用第一种方法进行了错误的转换。
  • 当数据 1 是“02.01.2015 01:01”时,正确的输出是 2015 年 1 月 2 日。不要忘记我的格式是“DD.MM.YYYY HH:mm”而不是“MM.DD.YYYY HH:mm”。
  • 是的,我的代码是正确的,但我在叙述中交换了两个结果。我已经修复了描述;代码保持正确。
  • 好的。 :) 我会这样尝试。
  • 是的。你说的对! :) 非常感谢!你的回答很有帮助! :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-27
  • 2014-09-12
  • 2011-11-28
相关资源
最近更新 更多