Функция lastRec — как именно она работает?

#vba #function #range

#vba #функция #диапазон

Вопрос:

Предполагается, что приведенная ниже функция возвращает строку в диапазоне с последней записью.
Насколько я могу судить, функция работает, но мне интересно, что myRange(myRange.Count).Row и myRange(1) должно означать?
Спасибо за вашу помощь!

 Public Function lastRec(myRange As range, myDate As Date)
    For x = myRange(myRange.Count).Row To myRange(1).Row Step -1
        If CDate(Left(Cells(x, myRange.Column), 10)) = myDate Then
            lastRec = x
            Exit Function
        End If
    Next x
End Function
  

Ответ №1:

lastRec() функция фактически возвращает строку первой ячейки myRange , значение которой первые 10 символов соответствует переданному myDate

это работает, если myRange это диапазон из 1 столбца

myRange(myRange.Count).Row возвращает индекс строки последней ячейки в myRange

myRange(1).Row возвращает индекс строки первой ячейки в myRange

Комментарии:

1. Разве это не вернет последнюю ячейку, myRange поскольку она работает в обратном Step -1 направлении. Также произойдет сбой, если ячейка пуста, или первые 10 символов не могут быть преобразованы в дату, или если у вас выбран другой лист, отличный от указанного в myRange ( Cells команда будет просматривать активный лист).

Ответ №2:

Range.Count возвращает длинное значение, которое представляет количество объектов в коллекции, поскольку range.row возвращает номер первой строки первой области в диапазоне.

range(1) где 1 называет диапазон, чтобы вернуть объект диапазона, представляющий одну ячейку или диапазон ячеек.