添加日期导致午夜之前的时间

时间:2020-06-03 22:07:45

标签: excel vba

我正在尝试在VBA中的大型宏中添加两个日期,例如:

Public Sub sumDate()
    Dim start As Date
    Dim endTime As Date
    start = #11:31:00 PM#
    endTime = #12:30:00 AM#

    Cells(1, 1) = start + endTime
End Sub

每次在我的大宏中运行时,都会抛出

错误400

然后停止。 当我只运行上面的代码时,出现运行时错误1004。

使用1904年与1900年日期系统有什么关系吗?我的宏在午夜之前一直正常运行。

编辑:为清楚起见,将变量从“更改为#”。

2 个答案:

答案 0 :(得分:1)

如果它们在不同的日子,则不能像这样将时间加在一起。

他们也需要具有一个Date值,或者使用您所说的“ day 0”,即您所说的1900年1月1日或1904年1月1日。

此外,将它们加在一起几乎没有意义,但是您可以这样做:

Public Sub sumDate()
    Dim start As Date
    Dim endTime As Date
    start = Date & " 11:31:00 PM"
    endTime = DateAdd("d", 1, Date) & " 12:30:00 AM"

    Cells(1, 1) = start + endTime
End Sub

那不会给你你想要的。您可能正在寻找从他们那里获得时间跨度的东西。您可以这样做:

Public Sub sumDate()
    Dim start As Date
    Dim endTime As Date
    start = #11:31:00 PM#
    endTime = #12:30:00 AM#

    Cells(1, 1) = Abs(DateDiff("s", start, endTime))

End Sub

这将为您提供这两个日期之间的秒数,这也不是您想要的。

您想要这些东西的组合:

Public Sub sumDate()
    Dim start As Date
    Dim endTime As Date
    start = Date & " 11:31:00 PM"
    endTime = DateAdd("d", 1, Date) & " 12:30:00 AM"

    Cells(1, 1) = Abs(DateDiff("s", start, endTime))

End Sub

这将为您提供秒数。

如果您想分钟:

Public Sub sumDate()
    Dim start As Date
    Dim endTime As Date
    start = Date & " 11:31:00 PM"
    endTime = DateAdd("d", 1, Date) & " 12:30:00 AM"

    Cells(1, 1) = Abs(DateDiff("s", start, endTime)) / 60

End Sub

OR

Public Sub sumDate()
    Dim start As Date
    Dim endTime As Date
    start = Date & " 11:31:00 PM"
    endTime = DateAdd("d", 1, Date) & " 12:30:00 AM"

    Cells(1, 1) = Abs(DateDiff("m", start, endTime))

End Sub

但是,如果它们恰好在同一天,那么这也不起作用。

简而言之,如果您希望DateDiff正常工作,则需要在日期/时间值中包含ACTUAL DATE ITSELF。

像我在示例中一样手动添加它不是解决方案。它只是表明它无法按照您认为的方式工作。

答案 1 :(得分:0)

变量不是正确的类型。通过引用它们,您为它提供了文本值,而不是时间值。

您应该用#括起来(例如#1:23#)