Представьте, что ваш ввод выглядит как столбец A
, и вы хотите передать даты в столбец B
:

Есть две проблемы, которые следует учитывать - ячейки в строке 3 и строке 5. Строка 5 может быть легко проверена, поскольку это ошибка, и ?IsError(Cells(5,1)
вернет True
. Однако, если кто-то попытается проверить ?IsError(Cdate("K"))
, возникнет проблема.
Быстрый способ исправить это - специальная логическая функция с On Error Resume Next
, возвращающая True
, если в разговоре CDate(value)
есть какая-либо конкретная ошибка:
Sub TestMe()
Dim target As Range
Dim myCell As Range
Set target = Worksheets(1).Range("A1:A6")
For Each myCell In target
If IsCellDate(myCell) Then
Dim someDate As Date
someDate = myCell
myCell.Offset(0, 1) = someDate
End If
Next
End Sub
Public Function IsCellDate(myData As Variant) As Boolean
On Error Resume Next '- use this line really with caution!
If IsError(CDate(myData)) Then
IsCellDate = False
Exit Function
End If
IsCellDate = True
End Function
Или вы можете использовать IsDate()
и избежать пользовательской функции, как в этот ответ .