Im trying to use range.find to look up a value within a column, and return the matching value from the next column.
I recorded the find() using the macro recorder, which seemed to work fine for a while, but for some reason it's now giving me an error. As far as I can tell I haven't changed anything that should affect this bit of code.
This is what I have
Public Function look_up_id(id, table)
Worksheets(table).Activate
Cells.Find(What:=id, After:=ActiveCell, LookIn:=xlFormulas, LookAt _
:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
False, SearchFormat:=False).Activate
look_up_id = ActiveCell.Offset(0, 1).Value
End Function
The error I'm now getting is:
Object variable or With block variable not set
Any idea why this is now happening?
All the resources I can find on range.find() look like I'm doing it right...
Cheers - David
Try to use this code instead (when Find
doesn't find anything, it returns Nothing
and then you tried to do sth like this Nothing.Activate
, and this triggers an error):
Dim res As Range
Set res = Worksheets(table).Cells.Find(What:=id, LookIn:=xlFormulas, LookAt _
:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
False, SearchFormat:=False)
If Not res Is Nothing Then
look_up_id = res.Offset(0, 1).Value
End If