非常感谢您对以下代码的帮助。我尝试让它按照我想要的方式工作,但并没有取得太大的成功。我想做的是在选项卡 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
范围。