Как я указывал в своем ответе на предыдущий вопрос, работать с датами и функцией Range.Find
может быть сложно. Одна из причин, по-видимому, заключается в том, что тип данных VBA Date не совпадает с датой, хранящейся на листе Excel. Последний формат Double
выглядит как дата.
Таким образом, особенно если вы хотите, чтобы ваш метод .Find
не зависел от настроек даты, вам, вероятно, лучше не использовать метод Range.Find
, а циклически проходить по данным.
В приведенном ниже коде я показываю пример того, как это может работать, делая предположения на основе предоставленной вами рабочей книги, а также используя массив VBA, поскольку это будет выполняться намного быстрее, чем циклически проходить через диапазон на рабочем листе:
Sub actualcf()
Dim cfdate As Long 'Yes --Long for this application
Dim daterow As Long
Dim datecolumn As Long
Dim fnd As Range
Dim srchRng As Range
Dim vSrch As Variant
Dim I As Long
With Worksheets("Peschiera CF")
'Find the row with the dates
Set srchRng = .Cells.Find(what:="Yr. Ending", after:=.Cells(1, 1), LookIn:=xlValues)
'Read that row into a VBA array, but only the columns with data
'Note that we are using `.Value2` which has no formatting
If Not srchRng Is Nothing Then
vSrch = .Range(.Cells(srchRng.Row, 1), .Cells(srchRng.Row, .Columns.Count).End(xlToLeft)).Value2
End If
cfdate = WorksheetFunction.EoMonth(Date, -1)
For I = 1 To UBound(vSrch, 2)
If vSrch(1, I) = cfdate Then
daterow = srchRng.Row
datecolumn = I
End If
Next I
End With
End Sub