VBA:如何对 DateDiff 函数进行 IF 语句
Posted
技术标签:
【中文标题】VBA:如何对 DateDiff 函数进行 IF 语句【英文标题】:VBA: How to make an IF statement on a DateDiff function 【发布时间】:2016-01-15 15:33:33 【问题描述】:在我正在处理的 VBA 项目中,我需要计算两个日期之间的差异小于 X 小时的行数。
我的想法是遍历所有行并检查每一行,如下所示:
Dim count as Integer
if DateDiff("h", date1, date2) < 24 then
count = count + 1
End If
问题是我收到不兼容类型错误(执行错误 13)。
是否可以对 DateDiff 函数进行 IF 语句?或者是否可以使用 DateDiff 作为条件进行过滤?
感谢您的帮助,并为我糟糕的英语感到抱歉,因为它不是我的主要语言!
【问题讨论】:
我没有收到错误。错误发生的日期是什么时候? date1 和 date2 是如何声明的? 日期是 '14/10/2015 19:00:00' 和 '14/10/2015 16:28:43' 写这个回复,我想我可能已经弄清楚了错误:日期和时间之间有两个空格,会不会是错误? 【参考方案1】:我已经这样测试过了,没有任何错误。
Dim date1 As Date
Dim date2 As Date
date1 = "14/10/2015 19:00:00"
date2 = "14/10/2015 16:28:43"
If DateDiff("h", date1, date2) < 24 Then
count = count + 1
End If
【讨论】:
【参考方案2】:VBA 转换函数CDate
可以应用您经常支付的少量开销来更正日期。话虽如此,最好从一开始就纠正数据,而不是依赖错误控制的转换函数。
Dim date1 As Date, date2 As Date, n As Long
date1 = CDate("14/10/2015 19:00:00")
date2 = CDate("14/10/2015 16:28:43")
Debug.Print date1 & " to " & date2
If IsDate(date1) And IsDate(date2) Then
If DateDiff("h", date1, date2) < 24 Then
n = n + 1
End If
'alternate
If date2 - date1 < 1 Then
n = n + 1
End If
End If
鉴于 24 小时是一天,而一天是 1,简单的减法应该足以进行此基础比较。
您的 DMY 格式可能会导致日期转换中以 EN-US 为中心的 VBA 出现问题。如果发现不明确的日期字符串(例如“11/10/2015 16:28:43”),您可能会发现您将其解释为 MDY。
【讨论】:
以上是关于VBA:如何对 DateDiff 函数进行 IF 语句的主要内容,如果未能解决你的问题,请参考以下文章