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

如果觉得这应该是很容易的,但是我没有得到它的工作,没有再次检索单元格的价值。

首先,我有2个date单元格:

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语句吗?

由于只有Varianttypes的variables可以为空,因此您需要对Datetypes进行不同的testing。

检查零点:

 If agreedDate = 0 Or completedDate = 0 Then 

但更安全的path是将variables更改为键入Variant,然后执行此testing:

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

IsEmpty函数确定是否已经初始化一个variables 。 如果一个单元格是真正的空白,那么从IsEmpty的angular度来看,它被认为是未初始化的。 但是,在VBA中声明一个variables会给它一个默认值。 在这种情况下,datetypesvariables基本上是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 

如果你想“清理”你的代码,你可能也希望允许IsEmpty函数的真正的布尔值返回来解决布尔条件,而不是把它与True进行比较。

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

鉴于 (是所有意图和目的)为零,那么这将适用于您的datetypesvariables。

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

正如Excel英雄所指出的,datevariables不能为空。 事实上,datevariables是一个数字,所以你应该可以做这样的事情。 另外,请注意下面的代码使用“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