#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 называет диапазон, чтобы вернуть объект диапазона, представляющий одну ячейку или диапазон ячеек.