1

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

Sub test()
Dim SearchRng As range
Dim FindVar As Variant
Dim find As Variant
Dim EndNum As Long
Dim r As range

    Set Final = ActiveWorkbook.Worksheets("Tab 1")
    Set WS = ActiveWorkbook.Worksheets("Tab 2")

    EndNum = WS.range("A1").End(xlDown).row

    Set SearchRng = WS.range("A1:A" & CStr(EndNum))
    Set FindVar = SearchRng.find(range("K2").Value)

    For Each r In FindVar
        If Not FindVar Is Nothing Then
            WS.Activate
            FindVar.Activate
            'my code
            Else
        End If
    Next

End Sub

1 ответ1

1

Просто в том случае, если вы не знали, вам не нужно .Activate или .Select эти диапазоны - все это значительно замедляет ваш код и заставляет ваш экран делать странные вещи ... Но это может быть сделано для целей тестирования, и это нормально.

Кроме того, вы должны добавить Option Explicit в верхнюю часть ваших модулей, так как вы никогда не объявляли объекты своей таблицы. Я сделал это для тебя.

Вы можете использовать .FindNext чтобы сделать то, что вы просите.

Option Explicit

Sub test()

    Dim ws As Worksheet, Final As Worksheet
    Set Final = ThisWorkbook.Worksheets("Tab 1")
    Set ws = ThisWorkbook.Worksheets("Tab 2")

    Dim EndNum As Long
    EndNum = ws.Cells(Rows.Count, 1).End(xlUp).Row

    Dim sToFind As String, rngFind As Range, addrStart
    sToFind = ws.Range("K2").Value

    With ws.Range("A1:A" & EndNum)
        Set rngFind = .find(sToFind, LookIn:=xlValues)
        If Not rngFind Is Nothing Then
            addrStart = rngFind.Address
            Do
                ws.Activate
                rngFind.Select
                'my code  
                Set rngFind = .FindNext(rngFind)
            Loop While Not rngFind Is Nothing And rngFind.Address <> addrStart
        End If
    End With

End Sub

Причиной того, что For Each r In FindVar не работала, было то, что FindVar имел диапазон 1x1 .

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