Похоже, у вас есть данные, которые не могут быть преобразованы в даты.Это означает, что вы должны сделать свой код более надежным.Первая версия может выглядеть так:
Function FnDateExtract(fnFile, fnTab, fnRow, fnColumn) As Date
Dim RawExtract As String
With Workbooks(fnFile).Worksheets(fnTab)
RawExtract = .Cells(fnRow, fnColumn).Text
If Len(RawExtract) > 10 Then RawExtract = Left(RawExtract, 10)
If IsDate(RawExtract) Then
FnDateExtract = CDate(Format(RawExtract, "yyyy/mm/dd"))
Else
FnDateExtract = vbEmpty
End If
End With
End Function
В более улучшенной версии можно правильно определить параметры, например:
Function FnDateExtract(ByVal fnFile As String, ByVal fnTab As String, _
ByVal fnRow As Long, ByVal fnColumn As Long) As Date
Функция все еще может быть легко нарушена, если вы полагаете, что выесть книга с именем fnFile с листом fnTab.Самый простой (возможно, быстрый и грязный) способ справиться с этим - добавить обработчик ошибок.
Так что вторая версия может выглядеть так
Function FnDateExtract(ByVal fnFile As String, ByVal fnTab As String, _
ByVal fnRow As Long, ByVal fnColumn As Long) As Date
Dim RawExtract As String
On Error GoTo EH
With Workbooks(fnFile).Worksheets(fnTab)
RawExtract = .Cells(fnRow, fnColumn).Text
If Len(RawExtract) > 10 Then RawExtract = Left(RawExtract, 10)
If IsDate(RawExtract) Then
FnDateExtract = CDate(Format(RawExtract, "yyyy/mm/dd"))
Else
FnDateExtract = vbEmpty
End If
End With
Exit Function
EH:
FnDateExtract = vbEmpty
End Function