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 语句的主要内容,如果未能解决你的问题,请参考以下文章

我不能使用 datediff vba

如何在 vba 中使用 Bcrypt.Net 对 PHP 中 crypt 函数存储的密码进行身份验证

如何在 Excel VBA 中对字符串进行 URL 编码?

如何在 Excel VBA 中对数组进行切片?

IF & Statement 从 excel 到 VBA

oracle中DateDiff()的用法