【问题标题】:VBA can't convert date stored in generalVBA无法转换一般存储的日期
【发布时间】:2021-04-10 13:14:59
【问题描述】:

我一直在尝试解决这个问题,我什至偶然设法让它工作了一段时间,但是从那以后我就没有运气了。

所以我有一个 excelsheet,其中有一列以这种格式存储日期:“yyyy.mm.dd hh:mm”(例如:2021.01.02 11:40) 这些日期以一般单元格格式存储,我想将它们存储在 Date 变量中,这样我就可以使用 DateDiff 函数来确定从现在到存储的日期已经过去了多少天。 我可以将它们存储为字符串,但每当我尝试将其转换为日期时,我都会收到“运行时错误'13':类型不匹配”错误。

我有一个相当长而复杂的代码,所以我不会分享整个事情。我仍然不确定这有什么帮助,但它在 braX 的解决方案中处于当前状态:

    Dim Date1 As String
    Dim Date2 As Date
    Dim dayD As Long

    ...

    Date1 = ws.Cells(RowLoop, 124).Value
    MsgBox Date1
    Date2 = CDate(Replace(Date1, ".", "/"))
    MsgBox Date2
    dayD = DateDiff("D", Date2, Now)
    MsgBox dayD

ws 指的是它来自的工作表 RowLoop 是这段代码所在的循环

【问题讨论】:

  • 听起来你的“日期”根本不是日期......而是文字。 Excel 日期实际上是一个数字,您所说的单元格格式实际上是数字格式。 VBA 绝对可以将任何格式转换为另一种格式,但您并没有为 VBA 提供您所想的那样。将工作表中的文本“日期”转换为真正的 Excel 日期(数字格式为日期),或者将文本“日期”中的句点替换为正斜杠 /

标签: excel vba date format


【解决方案1】:

由于它们存储为字符串而不是实际日期,因此您需要先将句点转换为斜线才能将它们转换为实际日期:

Debug.Print CDate(Replace("2021.01.02 11:40", ".", "/"))

不确定您的上下文,因为您在问题中没有提供代码。

Dim dt as Date
dt = CDate(Replace("2021.01.02 11:40", ".", "/"))

MsgBox "The date is: " & Format$(dt,"mm/dd/yy hh:mm:ss")

【讨论】:

  • 这有点奏效。虽然我得到了我想要的最终结果,但它实际上并没有进行替换。因此,当我将其存储在字符串中并将其放入消息框中时,它看起来像:“2020.01.02.11:40”,当我使用您建议的替换时,我得到了这个结果:“2020.01.02.11 :40:00",所以它只是在点后添加空格,并在时间结束时添加秒。我可能是错的,但我怀疑秒数可能是它真正起作用的原因
  • 再说一次,如果不发布任何代码,很难真正知道自己在做什么。一旦它是实际日期,您可以使用Format 以任何您想要的方式重新格式化它。我为您添加了一些答案。
  • 用一些代码编辑了它,但我怀疑它有什么用。
  • 好的,你是说你添加的代码对你有用吗?
  • 嗯,我得到了我需要的最终结果,即从现在到存储在相​​关单元格中的日期之间的天数差异。只是事情并没有完全按照我的预期工作,但它达到了它的目的。感谢您的帮助!
猜你喜欢
  • 1970-01-01
  • 2016-09-22
  • 1970-01-01
  • 1970-01-01
  • 2017-10-30
  • 1970-01-01
  • 2013-04-01
  • 2020-07-04
  • 2016-01-06
相关资源
最近更新 更多