Как проверить, пуста ли ячейка даты в Excel?
Если кажется, что это должно быть очень легко, но я не могу заставить его работать, не получая значение ячейки снова.
для начала у меня есть 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 ответов
поскольку только переменные типа Variant могут быть пустыми, вам нужен другой тест для типов дат.
проверка на ноль:
If agreedDate = 0 Or completedDate = 0 Then
но более безопасным путем было бы изменить переменные на тип Variant, а затем выполнить этот тест:
If IsDate(agreedDate) = False Or IsDate(completedDate) = False Then
на функция IsEmpty определяет указал была ли инициализирована переменная. Если ячейка действительно пуста, то она считается неинициализированной из IsEmpty точки зрения. Однако объявление переменной в VBA дает ей значение по умолчанию. В этом случае переменные типа date по существу 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 разрешить булево условие, а не сравнивать его с правда.
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
Как отметил Герой Excel, переменная даты не может быть пустой. Фактически, переменная даты - это число, поэтому вы должны иметь возможность сделать что-то вроде этого. Кроме того, обратите внимание, что в приведенном ниже коде используется "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