我创建了一个宏,用于查找范围内单元格的所有匹配值。用户在单元格A2中输入例如numb
然后,每次他点击Find
按钮时,它都会向他显示匹配的单元格,例如Order Number
然后purchase number
然后{{1 } ...
这是我的代码
part number
它工作正常但是当用户例如按下不在我的范围内的单元格时,按钮Sub find_matched_cells()
w = ActiveWorkbook.Sheets("Sheet4").Range("A2")
ActiveWorkbook.Sheets("Sheet4").Range("A4:A104").Find(What:=(w), After:=ActiveCell, LookIn:=xlFormulas, _
LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:=False).Activate
End Sub
上的按钮将不起作用。问题出在
find
例如,如果您错误地选择了不在A4中的单元格:A104,则ActiveCell将不在我的范围内,并且会出错。
我需要添加条件,例如第一个ActiveCell从A4开始,如果我找到第一个匹配的单元格,那么ActiveCell将获取该值。
还有其他建议吗?非常感谢你。
答案 0 :(得分:1)
你可以检查十字路口。我会稍微重新编写代码,具体取决于你需要对每个找到的单元格实际做些什么 - 它只是选择它们吗?我修改了下面的代码,以避免在找不到值时出错。
Sub x()
Dim rFind As Range, sAddr As String, w
w = ActiveWorkbook.Sheets("Sheet4").Range("A2")
With ActiveWorkbook.Sheets("Sheet4").Range("A4:A104")
Set rFind = .Find(What:=w, LookIn:=xlFormulas, LookAt:=xlPart, MatchCase:=False, SearchFormat:=False)
If Not rFind Is Nothing Then
sAddr = rFind.Address
Do
rFind.Select
MsgBox w & " found at " & rFind.Address
Set rFind = .FindNext(rFind)
Loop While rFind.Address <> sAddr
End If
End With
End Sub
答案 1 :(得分:1)
一种方法是......
Sub find_matched_cells()
Dim Rng As Range
Set Rng = ActiveWorkbook.Sheets("Sheet4").Range("A4:A104")
w = ActiveWorkbook.Sheets("Sheet4").Range("A2")
If Intersect(ActiveCell, Rng) Is Nothing Then Range("A4").Select
Rng.Find(What:=(w), After:=ActiveCell, LookIn:=xlFormulas, _
LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:=False).Activate
End Sub