Both wersions of your code worked for me, but I would change
With Sheets(snOBJECTDATA)
Set r = .Range(OBJECTSTORE_RANGENAME)
Do Until r(row, COLID) = str Or r(row, COLID) = ""
If str = r(row, COLID) Then Exit Do
row = row + 1
Loop
End With
to, this, which picks up the absolute row instead of the row relative to the range (not an issue if the range starts in row 1.....)
Set r = Sheets(snOBJECTDATA).Range(OBJECTSTORE_RANGENAME)
For Each c In r
If UCase(str) = UCase(c.Value) Or c.Value = "" Then
row = c.Row
Exit Do
End If
Next c
And I would set the matchcase argument of the find method to false:
Set r2 = rng.Find(What:=str, Lookin:=xlValues, LookAt:=xlWhole, MatchCase:=False)
Bookmarks