Вы на правильном пути, но некоторый синтаксис вашей функции немного не в порядке.
Рассмотрите возможность переписывания следующим образом:
Private Function FindUpperDateCellAddress(ByVal stringUpperDate As String) As Range
Dim upperBoundCellAddress As String
Dim RangeToSearch As Range
Set RangeToSearch = Range("D:D").Find(stringUpperDate, LookAt:=xlWhole, LookIn:=xlValues)
If RangeToSearch Is Nothing Then
'Do nothing
MsgBox "Sorry, I have not been able to find an upper cell address.", vbCritical, "Oops"
Exit Function
Else
upperBoundCellAddress = RangeToSearch.Address
End If
Set FindUpperDateCellAddress = Sheet1.Range(upperBoundCellAddress)
End Function
И вызовите его из подпрограммы, например:
Sub TestDate()
Dim myDate As Range
Set x = FindUpperDateCellAddress("14/04/2020")
Debug.Print "The date found was: " & x.Value
Debug.Print "The Address found was: " & x.Address
End Sub
Это найдет "14/04/2020"
в Column D
на Sheet
на основании приведенных ниже данных на листе.
ПРИМЕЧАНИЕ: это будет только находить дату как String
, означая, что она найдет ее, только если дата записана как текстовое значение, а не как значение даты. См. Ниже в этом примере порядок поиска значения даты.
На основании данных этого примера будет напечатано следующее в окно непосредственного доступа VBE:
The date found was: 14/04/2020
The Address found was: $D$14
Для тех же результатов, но при поиске значения date
, измените его на функцию:
Dim convertedDate As Date
convertedDate = CDate(stringUpperDate)
Set RangeToSearch = Range("D:D").Find(convertedDate, LookAt:=xlWhole, LookIn:=xlValues)