First, a warning: acLast for any table is unreliable (as is acFirst). A table has no inherent order. A query with an ORDER BY has an order only because you defined the order. Don't bet on going to the first or last record to see a specific record. Use Max or Min .
Next, if you are going to try this, the USUAL way (not the only way, certainly) is to recognize that your form has two recordsets. One is the main .RecordSource that defines form.Recordset; the second is the .RecordSetClone, which is a recordset based on the same set defined for your main .Recordset, except you can manipulate it without messing up the form.
So you do something similar to
Code:
Me.RecordsetClone.MoveFirst
Me.RecordsetClone.FindFirst "field = value"
IF Me.RecordsetClone.NoMatch then
'something wrong here - take action like a warning or something
Else
Me.Recordset.Bookmark = Me.RecordsetClone.Bookmark
End If
You just have to supply a value to be matched against a particular field. That .FindFirst argument might have to involve concatenation depending on the nature of the field in the list box. The one thing you might wonder about is that .MoveFirst, which will let you search from the first record in the table. This is the ONE time that acFirst has value, because it lets you search the whole table.