在其他选项卡中查找单元格值

在其他选项卡中查找单元格值

非常感谢您对以下代码的帮助。我尝试让它按照我想要的方式工作,但并没有取得太大的成功。我想做的是在选项卡 2 中找到在选项卡 1 单元格“K2”中输入的值。如果选项卡 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

如果你不知道,你不需要.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范围。

相关内容