Como fazer o Loop parar

3

Gostaria de receber ajuda com o meu código abaixo. O código irá percorrer todas as linhas e, se encontrar uma certa cadeia de texto, executará algum código. Em seguida, ele continuará na próxima célula que contém essa sequência de texto e assim por diante. O que eu não consigo descobrir é que o loop continua infinitamente. Não tenho certeza do que estou perdendo com o loop que criei.

Sub FINDnSELECT()

Dim WS As Worksheet
Dim Code As range

range("A1").Select

For Each WS In ThisWorkbook.Worksheets
    With WS.UsedRange
        Set Code = .cells.Find(What:="TEST")
        If Not Code Is Nothing Then
            Do Until Code Is Nothing

              Code.Select
              'my code

              Set Code = .FindNext(Code)
            Loop
        End If
    End With
    Set Code = Nothing
Next

End Sub
    
por Eric 23.01.2018 / 19:30

2 respostas

2

Em Range.FindNext no MSDN :

When the search reaches the end of the specified search range, it wraps around to the beginning of the range. To stop a search when this wraparound occurs, save the address of the first found cell, and then test each successive found-cell address against this saved address.

Então, em vez disso:

If Not Code Is Nothing Then
    Do Until Code Is Nothing

Você vai querer algo assim:

Dim firstFoundAddress As String

If Not Code Is Nothing Then
    firstFoundAddress = Code.Address
    Do
        '...
        Set Code = .FindNext(Code)
    While firstFoundAddress <> Code.Address
End If
    
por 23.01.2018 / 20:07
0

Não tenho certeza do que estou perdendo com o loop que criei.

Você tem o seguinte:

Dim Code As range

...

            Do Until Code Is Nothing

...

            Loop

No entanto:

**Nothing**

This keyword/value can only be used with variables declared as Object or Variant

Code não está declarado como tipo Object ou Variant .

Fonte Tipos de dados VBA - Nada

Leitura Adicional

por 23.01.2018 / 19:37