Ошибка, когда совпадение не найдено при использовании метода поиска

#excel #vba #find

Вопрос:

Я знаю, что это, вероятно, имеет широкий охват, и я пробовал некоторые из них, но все еще не могу заставить их работать:

         Dim d As Range
        For Each d In orng
            Dim val As Range
            Set val = adws.Range("O2:O" amp; lrw).Find(d.Value, , xlValues, xlWhole).Offset(0, 26)
            
            If val Is Nothing Then
                MsgBox d.Value amp; " not found."
                End
            Else
                d.Offset(0, 12) = val.Value
            End If
        Next
 

Код работает нормально до тех пор, пока функция находит значение, но выдает ошибку при первом обнаружении, что это не так. Установка переменной val и запуск функции поиска в той же строке, которую я получил с других форумов. Но это, похоже, совсем не работает. Поиск все еще путается, когда не может найти значение.

Заранее спасибо.

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

1. Понял. Спасибо!

Ответ №1:

Это .Offset(0, 26) проблематично. Не Find связывайте звонки по цепочке с вызовом, а только Offset после того, как вы убедитесь Find , что вызов прошел успешно.

Также подумайте об использовании другого имени переменной, отличного Val от того, которое скрывает Val функцию.

 Dim rng as Range
Set rng = adws.Range("O2:O" amp; lrw).Find(d.Value, , xlValues, xlWhole)
           
If rng Is Nothing Then
    MsgBox d.Value amp; " not found."
    End
Else
    d.Offset(0, 12).Value = rng.Offset(0, 26).Value ' Offset here since Find succeeded
End If