Znajdź wartość komórki na innej karcie

1

Byłbym wdzięczny za pomoc w poniższym kodzie. Nie miałem dużo szczęścia, próbując sprawić, by działało tak, jak chcę. To, co próbuję zrobić, to znaleźć wartość wprowadzoną w komórce 1 „K2” na karcie 2. Jeśli wartość istnieje na karcie 2, wybierze wartość i wykona trochę kodu, a następnie sprawdzi, czy z ciągiem tekstowym istnieje inna komórka . To, czego nie mogę zrozumieć, to utworzenie pętli, która znajdzie wszystkie komórki, które mają ciąg tekstowy, który próbuję znaleźć. Z góry dziękuję!

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
Eric
źródło

Odpowiedzi:

1

Na wypadek, gdybyś nie był tego świadomy, nie musisz tego robić .Activateani .Selecttych zakresów - wszystko to znacznie spowalnia twój kod i powoduje, że ekran robi dziwne rzeczy ... Ale to mogło być zrobione dla celów testowych, co jest w porządku.

Ponadto należy dodać Option Explicitna górze modułów, ponieważ nigdy nie zadeklarowano obiektów arkusza roboczego. Zrobiłem to dla ciebie.

Możesz użyć tej .FindNextmetody, aby zrobić to, o co prosisz.

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

Powodem, dla którego For Each r In FindVarnie działałeś, FindVarbył 1x1zasięg.

K.Dᴀᴠɪs
źródło