Я читал соответствующие темы в течение нескольких часов, но не могу найти решение. Ваша помощь будет очень признательна, спасибо.Excel vba: .find функция возвращает ошибку времени выполнения 91
Я пытаюсь найти максимальное значение в диапазоне, а затем найти, в какую строку он был. Этот код отлично подходит для моих первых 600 + строк чисел, затем сбой и дает мне Runtime Error 91. Кажется, что он сбой в том же месте, независимо от того, что я делаю.
Dim rSearchRange As Range
Dim dMaxToFind As Double
Dim rSolutionrange As Range
Set rSearchRange = Sheets("MySheet").Range(Cells(672, 1), Cells(681, 1))
With Application.WorksheetFunction
dMaxToFind = .Max(rSearchRange)
End With
'This bit here returns "nothing" even though i found the max value in this range
Set rSolutionrange = rSearchRange _
.Find(What:=dMaxToFind, _
LookIn:=xlFormulas, LookAt:=xlWhole, SearchOrder:=xlByRows, _
SearchDirection:=xlNext, MatchCase:=False)
Рассматривая мои данные, похоже, что они меняют формат в этих строках?
Row 670 - 0.000458587
Row 671 - 0.000458587
Row 672 - 9.80465E-05
Row 673 - 9.80465E-05
Редактировать:
dMaxToFind возвращает 9.80465352566588E-05
клеток формула возвращает 0.0000980465352566588
это то же самое значение, в клетках между Range (Cells (672, 1), клетки (681, 1)
похоже, что vba не понимает, что эти два одинаковы?
Спасибо,
Все
Try '... Lookin: = xlValues ...' ' – user3598756
.Find' возвратит' Nothing' если нет матча критериев поиска.Ошибка 91 является * поднятой * (не «возвращена»), когда вы * позже * используете эту переменную объекта 'rSolutionRange' и предполагаете, что она установлена в действительную ссылку (' Nothing' не является допустимой ссылкой на объект) - вам нужно проверить ' Если rSolutionRange Is Nothing', прежде чем использовать его. –
Также 'Таблицы (« MySheet »). Диапазон (ячейки (672, 1), ячейки (681, 1))' взорвется, если 'Sheets (« MySheet »)' не является активным листом, потому что 'Cells (xxx, yyy) 'вызовы неявно ссылаются на' ActiveSheet', поэтому вам также нужно квалифицировать эти вызовы; используйте 'With Worksheets (« MySheet »)' then do 'Set rSearchRange = .Range (.Cells (672, 1), .Cells (681,1))' внутри блока 'With' (обратите внимание на точки). –