【问题标题】:Time Calculation Type Mismatch时间计算类型不匹配
【发布时间】:2020-01-31 02:20:25
【问题描述】:

我正在尝试计算两个日期之间的差异到小数点后两位。但是,每当我执行代码时,我都会收到错误 13,类型不匹配。我在网上搜索并尝试了很多变体,但我总是以类型不匹配结束。我不确定如何解决这个问题。有人可以教我怎么做吗?

INFO:最初使用来自this question的代码

这是当前代码:

Sub Query()
    Dim Beginning As Date: Beginning = Now: Dim Duration As Double
    ... more code ...
    Duration = Round((Now- Beginning) * 60 * 60 * 24, 2)
End Sub

这行得通,谢谢 BigBen!另外,谢谢 Siddarth Rout。

顺便说一句,我改成了你提到的定时器,BigBen,而且好多了。 :)

Sub Query()
    Dim Beginning As Single: Dim Ending As Single
    Beginning = Timer()
    ... more code ...
    Ending = Timer()
    Duration = Format(WorksheetFunction.Round(Ending - Beginning, 2), "#0.00")
End Sub

服务很好,再次感谢!

亲切的问候, 约瑟夫

【问题讨论】:

  • Format 返回Variant/String。链接的答案需要修复。
  • 此外,该函数根本不会返回以秒为单位的差异。 / 60 / 60 / 24DateDiff 的结果从秒转换回天...
  • 你要使用计时器吗?
  • 我不确定您所说的计时器是什么意思 - 这是 Excel VBA 中的特定对象吗?我正在尝试计算一段代码运行需要多长时间。
  • 是的 Timer 对于您想做的事情好多了 :-)。无论如何,很高兴能提供帮助。重要的是你得到了你需要的答案,即使需要一些时间才能到达那里。

标签: excel vba


【解决方案1】:
  1. Format 返回 Variant/String,您不能将其分配给 Double。链接的答案不正确。

  2. 该函数当前在 内获取DateDiff 的结果,并通过除法将其返回 转换为天。如果您想要几分之一秒,您将需要一种不同的方法; DateDiff 只能返回整个秒的差异。

只需将两个日期的差乘以 60 * 60 * 24。然后您可以根据需要进行四舍五入:

Public Function DifferenceInSeconds(ByVal EarlierDate As Date, ByVal LaterDate As Date) As Double
    DifferenceInSeconds = (LaterDate - EarlierDate) * 60 * 60 * 24
End Function

【讨论】:

  • 谢谢 BigBen,我根据您的建议更新了原始帖子中的代码并发布了结果。它给了我一个意想不到的结果。也感谢 Siddarth Rout。我不知道如何将您的建议合并到可行的代码中,我很抱歉。
  • @Joseph316:我相信你正在使用相反的日期:)
  • 啊,你是对的!尴尬。好的,我已经解决了,哈哈。但是,我仍然没有得到任何小数位 - 知道为什么吗?
  • @Joseph316 - 取消舍入并查看原始结果 :-)
  • @Joseph316 - 需要注意的一点是,RoundWorksheetFunction.Round 的工作方式不同。但是这两个数字,四舍五入到小数点后 2 位,分别是 1 和 0。为了将来参考,请使用WorksheetFunction.RoundApplication.Round,而不是Round 函数。 Round 使用银行家四舍五入,这可能不是您想要的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-11-18
  • 2014-12-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多