If the result of the perform find is zero records then the set field does nothing.
PS the show all records is not needed as perform find is destructive of the current found set.
That's the curious thing. The value list to select from is generated from the records in the set, so there is no way to make a selection that does not result in a found record.
As previously mentioned: remove the show all records command.
Also: move the set field command to just below the variable declaration.
Are you sure that the search field is a global field?
A global field! Of course. Brilliant. Worked perfectly. Thank you so much!