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

How to check if a date cell in Excel 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 语句?

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

检查零:

If agreedDate = 0 Or completedDate = 0 Then

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

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

正如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

IsEmpty function判断指示的变量是否已经初始化。如果一个单元格确实是空白的,那么从 IsEmpty 的角度来看,它被认为是未初始化的。但是,在 VBA 中声明一个变量会给它一个默认值。在这种情况下,日期类型变量本质上是 030-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

如果您想 'tidy up' 您的代码,您可能还希望允许 IsEmpty 函数的真布尔值 return 解析布尔条件,而不是将其与 进行比较真.

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