Excel VBA Макросы: Обработка ошибок при использовании Find.

Автор Rengame113, 25 июля 2018, 17:47

Rengame113

Обрабатываю данные в диапазонах. Пока находятся значения, цикл продолжается. Как только не находится, переходит по метке и на выход. А как вернуться обратно в цикл.

Спойлер
On Error GoTo strERR
    For i = 1 To 9
        Set rngAll = rngStart.CurrentRegion   
        Nrow = rngAll.Rows.Count     
        rngAll.Find(What:="Лютик").Activate
        Set rngStart = rngStart.Offset(Nrow + 1, 0)   
    Next i
   
Exit Sub
strERR:
    MsgBox ("Что-то не то")
   
End Sub
[свернуть]

Администратор

Код
Sub Макрос()
   
    Dim found As Boolean
   
    For i = 1 To 9
       
        ' Присваиваем таблице имя 'rngAll'.
        Set rngAll = rngStart.CurrentRegion
       
        ' Включение перехватчика ошибок, т.к. если не будет найдено, то будет ошибка.
        On Error Resume Next
        ' Поиск.
        rngAll.Find(What:="Лютик").Activate
        ' Смотрим, произошла ошибка или нет. Если ошибка не произошла,
            ' то записываем True в переменную 'found'.
        If Err.Number = 0 Then
            found = True
        End If
        ' Отключение перехватчика ошибок, чтобы отлавливать непредвиденные ошибки.
        On Error GoTo 0
        ' Смотрим, было найдено или нет.
        ' Если было найдено.
        If found = True Then
            ' Сброс переменной, если планируется продолжить цикл.
                ' Чтобы в следующем витке цикла понять, было найдено или нет.
            found = False
            ' действия
        ' Если не было найдено.
        Else
            ' действия
        End If
        ' Переход к следующей таблице.
        Nrow = rngAll.Rows.Count
        Set rngStart = rngStart.Offset(Nrow + 1, 0)

    Next i
   
End Sub
[свернуть]