如何检查Excel中的日期单元格是否为空?

时间:2015-10-29 18:07:14

标签: excel vba excel-vba date is-empty

如果觉得这应该很容易,但是如果不再检索单元格的值,我就不能让它工作。

首先,我有2个日期单元格:

Dim agreedDate As Date
Dim completedDate As Date

这个工作..(但看起来很乱)

agreedDate = Worksheets("Data").Cells(Counter, 7).Value
completedDate = Worksheets("Data").Cells(Counter, 9).Value

If (IsEmpty(Worksheets("Data").Cells(Counter, 7).Value) = True) Or (IsEmpty(Worksheets("Data").Cells(Counter, 9).Value) = True) Then

[.. do stuff]
End If

这不起作用 - 为什么不呢?!

agreedDate = Worksheets("Data").Cells(Counter, 7).Value
completedDate = Worksheets("Data").Cells(Counter, 9).Value

If (IsEmpty(agreedDate) = True) Or IsEmpty(completedDate) = True) Then

[.. do stuff]
End If

有没有办法以干净简单的方式编写if语句?

3 个答案:

答案 0 :(得分:8)

由于只有Variant类型的变量可以为Empty,因此需要对Date类型进行不同的测试。

检查零:

If agreedDate = 0 Or completedDate = 0 Then

但更安全的方法是将变量更改为Variant类型,然后执行此测试:

If IsDate(agreedDate) = False Or IsDate(completedDate) = False Then

答案 1 :(得分:3)

IsEmpty function确定变量是否已初始化。如果一个单元格确实为空白,则从 IsEmpty 的角度来看,它被认为是未初始化的。但是,在VBA中声明变量会为其提供默认值。在这种情况下,日期类型变量基本上是 0 30-Dec-1899 00:00:00 ,如以下简短代码段所示。

Sub date_var_test()
    Dim dt As Date
    Debug.Print Format(dt, "dd-mmm-yyyy hh:mm:ss")
End Sub

如果你想整理'您的代码,您可能还希望允许IsEmpty函数的真正布尔返回来解析布尔条件,而不是将其与 True 进行比较。

If IsEmpty(Worksheets("Data").Cells(Counter, 7)) Or IsEmpty(Worksheets("Data").Cells(Counter, 9)) Then
    [.. do stuff]
End If

鉴于 False (对于所有意图和目的)为零,那么这将适用于您的日期类型变量。

If Not (agreedDate or completedDate) Then
    [.. do stuff]
End If

答案 2 :(得分:1)

正如Excel Hero指出的那样,日期变量不能为空。实际上,日期变量是一个数字,所以你应该可以做这样的事情。另请注意,下面的代码使用“Value2”。

Sub test()
    Dim d As Date
    d = Range("A1").Value2
    If d = 0 Then
      MsgBox "ok"
    Else
      MsgBox "not ok"
    End If
End Sub