hmm.. I think I may be confused. If I understand your suggestion, to use Selection.Range(), the snippet would be modified to look something like this:
oRange.Collapse(1) && Collase to Start of FOUND() word
lnEndPos = oWord.Selection.Range()
However, lnEndPos becomes a reference to an object. SetRange(lnStartPos, lnEndPos) is expecting integer values, so I don't understand how this would work.