Encontre o valor da célula em uma guia diferente

1

Eu realmente aprecio alguma ajuda com o código abaixo. Eu não tive muita sorte tentando fazer o trabalho do jeito que eu quero. O que estou tentando fazer é encontrar o valor inserido na guia 1 célula "K2" na guia 2. Se o valor existir na guia 2, ele selecionará o valor e fará algum código e, em seguida, verificará se existe outra célula com a cadeia de texto . O que não consigo descobrir é criar o loop que encontrará todas as células que possuem a cadeia de texto que estou tentando encontrar. Obrigado antecipadamente!

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
    
por Eric 14.02.2018 / 18:30

1 resposta

1

Apenas no caso de você não saber, não é necessário .Activate ou .Select esses intervalos - tudo isso é significativo para retardar seu código e fazer sua tela ficar estranha coisas ... Mas isso pode ter sido feito para fins de teste, o que é bom.

Além disso, você deve adicionar Option Explicit à parte superior de seus módulos, pois nunca declarou seus objetos da planilha. Eu fiz isso por você.

Você pode usar o método .FindNext para fazer o que está pedindo.

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

O motivo pelo qual For Each r In FindVar não funcionou foi que FindVar foi um intervalo de 1x1 .

    
por 14.02.2018 / 19:20