Unless you're using an ADP, then a Refresh instead of a Requery will maintain your cursor position in the form's resultset.
(Are you needing new records inserted by other users to be included and hence the Requery?)
Stephen Lebans has a subtle (but nice) example of requerying without changing position in a continuous form/datasheet if that's what you're interested in.
(You can just switch off screen/form updates for the duration to make the action appear seemless).
As for the Str use above Pat, I believe it's just DevastatioN being rigorous in VBA concatenation.
We so often in code rely on VBA to perform implicit type convertion for us - but it can be argued that we should use more like
strVariable2 = "Literal String " & CStr(strVariable1)
rather than
strVariable2 = "Literal String " & strVariable1
but of course - we pretty much all use the latter and so the former can look out of place.
The result will be he same.
Back to using the Bookmark method - FWIW if you're not going to check for a matching record before attempting to navigate to it - then you might as well just use the forms recordset directly.
Me.Recordset.FindFirst "[PrimaryKey] = " & CStr(keyVariable)
or
Me.Recordset.FindFirst "[PrimaryKey] = " & keyVariable