【问题标题】:VBA how to store timestamp in variableVBA如何将时间戳存储在变量中
【发布时间】:2017-03-15 12:40:31
【问题描述】:

我正在处理日志或历史文件。在第 1 列中有这样的时间戳,例如 2017 年 3 月 1 日星期三 22:08:01 EST 2017。 我将工作表的全部内容复制到二维变量数组中以进行进一步处理。现在我想将此时间戳存储为日期或日期时间以进一步处理它。

但如果我这样做了

dim dTimeStamp 作为日期

并在循环中使用它来存储 column1 的值 dTimeStamp = cdate(vbaseArray(I,1))

它给了我类型不匹配的错误。

有没有办法可以将时间戳值存储为日期或日期时间? 请提出建议。

【问题讨论】:

  • 嗨@jay - 几件事:首先在cdate(vbaseArray(I,1)) 中,您在行索引中有一个“L”,不确定这是问题所在还是只是在这里粘贴时出现了拼写错误,但想指出这一点。 .. 接下来是如果您使用Range.Value2 将范围读入数组我相信 Value2 会删除日期格式...最后,我不确定格式 'Wed Mar 01 22:08:01 EST 2017' 可以转换为日期使用 cdate- 所以 2 个选项:1)尝试 dateValue 或 2)如果这不起作用,您可能必须编写自己的日期转换函数,从上面的时间戳格式到日期,不会太棘手. -TheSilkCode
  • 嗨@SilkCode,感谢您的快速回复。 'L' 是循环中的行索引。我没有在这里粘贴整个代码。我也尝试了 datevalue,但它给了我相同的类型不匹配错误。我需要考虑编写自己的转换函数。
  • 啊,明白了。试试其他 2 个,如果可行,请告诉我。

标签: vba datetime timestamp


【解决方案1】:

您无法将该字符串自动转换为日期,因此您必须对其进行解析。一般来说,DateValueCDate 宽容一点。

从直接窗口

?datevalue(mid("Wed Mar 01 22:08:01 EST 2017",5,15))
3/1/2017 

这将始终为您提供当前年份。它会切断星期几并在时间之后停止。

如果你需要年份,或者你只是想更健壮,我会使用类似的函数

Function ConvertDate(ByVal sDate As String) As Date

    Dim vaSplit As Variant

    vaSplit = Split(sDate, Space(1))

    ConvertDate = DateValue(vaSplit(1) & Space(1) & vaSplit(2) & ", " & vaSplit(5)) + TimeValue(vaSplit(3))

End Function

从即时窗口

?convertdate("Wed Mar 01 22:08:01 EST 2017")
3/1/2017 10:08:01 PM 

【讨论】:

    猜你喜欢
    • 2021-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-27
    • 2021-03-22
    • 1970-01-01
    • 2015-05-03
    • 1970-01-01
    • 2019-07-21
    相关资源
    最近更新 更多