Вы делаете вызов участника против результата Range.Find
. Когда Range.Find
не находит то, что ищет, он возвращает Nothing
- и вы не можете позвонить .Select
на Nothing
.
Это именно то, что вы защищаете здесь:
Set Cell = Sheets(Sheetname).Columns("C:C").Find(...)
If Not Cell Is Nothing Then
'...
End If
Здесь необходимо сделать то же самое:
ActiveCell.Find(i).Select
То есть объявить локальную переменную и проверить, что Range.Find
успешно :
Dim somethingMeaningful As Range
Set somethingMeaningful = ActiveCell.Find(i) '<~ TODO recondiser whether ActiveCell is really needed
If Not somethingMeaningful Is Nothing Then
somethingMeaningful.Select '<~ TODO reconsider whether this is really needed
End If
Примечание: Rubberduck (бесплатный проект надстройки VBE с открытым исходным кодом, которым я управляю) может предупреждать о таких неохраняемых вызовах Range.Find
(они должны быть ранним), неявные ссылки ActiveSheet
и ActiveWorkbook
и другие проблемы с кодом.