我正在尝试在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年日期系统有什么关系吗?我的宏在午夜之前一直正常运行。
编辑:为清楚起见,将变量从“更改为#”。
答案 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#)