3

Я был бы признателен за помощь с моим кодом ниже. Код будет проходить через все строки, и если он найдет определенную текстовую строку, он выполнит некоторый код. Затем он перейдет к следующей ячейке, содержащей эту текстовую строку и так далее. Что я не могу понять, так это то, что цикл продолжается бесконечно. Я не уверен, что мне не хватает в цикле, который я создал.

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

2 ответа2

2

Из Range.FindNext на MSDN:

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

Итак, вместо этого:

If Not Code Is Nothing Then
    Do Until Code Is Nothing

Вы хотите что-то вроде этого:

Dim firstFoundAddress As String

If Not Code Is Nothing Then
    firstFoundAddress = Code.Address
    Do
        '...
        Set Code = .FindNext(Code)
    While firstFoundAddress <> Code.Address
End If
0

Я не уверен, что мне не хватает в цикле, который я создал.

У вас есть следующее:

Dim Code As range

...

            Do Until Code Is Nothing

...

            Loop

Тем не мение:

**Nothing**

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

Code не объявляется как тип Object или Variant .

Исходные типы данных VBA - ничего


Дальнейшее чтение

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .