如果觉得这应该很容易,但是如果不再检索单元格的值,我就不能让它工作。
首先,我有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语句?
答案 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