Измените эту строку
Set oFoundRng = oRng.FindNext(oFoundRng)
на
Set oFoundRng = oRng.FindNext
Вы ищете не слово, а диапазон, который вы ранее нашли. На самом деле вам вообще не нужно передавать значение .FindNext
.
Вы также должны изменить эту строку
If oLastRng >= oFoundRng Then
на
If oLastRng.Row >= oFoundRng.Row Then
, так какпервая строка сравнивает значения (это не то, что вы хотите сделать, поскольку оно всегда будет иметь значение True
). Вы действительно хотите сравнить номера строк.
В другом примечании следующий фрагмент кода не работает:
If UCase(oFoundRng.Offset(0, 1).Value) = "ISAAC" Then
Range("X" & cel.Row).Value = "X"
ElseIf UCase(oFoundRng.Offset(0, 1).Value) = "ISAAC" Then
Range("W" & cel.Row).Value = "X"
Этот ElseIf
никогда не будет запущен, так как условие одинаковокак начальное If
условие.
Вам также не нужны оба этих утверждения:
Set oFoundRng = Nothing
Exit Do
Они оба достигают одного и того же (прерывая цикл), Exit Do
делаетэто эффективнее.