如何检查 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 中声明一个变量会给它一个默认值。在这种情况下,日期类型变量本质上是 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
如果您想 '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
如果我觉得这应该很容易,但如果不再次检索单元格的值,我无法让它工作。
首先,我有 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 中声明一个变量会给它一个默认值。在这种情况下,日期类型变量本质上是 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
如果您想 '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