The Set Field step has two separate options:
1. Target field;
2. Calculated result.
It sounds like you are trying to include the target field in the "calculated result" part - and that won't work. In addition, the "target field" part cannot be calculated*.
A simple way to do what you ask for is to leave the target field undefined - this way, the step will operate on the active field (if there is an active field) - and make the calculated result =
Substitute ( Get (ActiveFieldContents) ; [ "Road" ; "Rd" ] ; [ "Avenue" ; "Ave" ] ; [ "Street" ; "St" ] ; [ "Pike" ; "Pk" ] ; [ ":00" ; "" ] )
(*) In version 10, there is a Set Field By Name  step that allows this.
What about setting the variable to the variable with substitution, and then use the variable?
Thats it, thank you.
Not totally sure what you are suggesting here. However, comment's suggestion above does exactly what I need. Thanks.
Thanks to this old post, I've solved MY problem. Thanks, Comment.
I have several fields in a Global table that contain the paths for storing / getting various files.
Users tend to enter a backslash instead of a forward slash, and omit the trailing slash. I want to correct this at data entry time.
I had had a OnExit-triggered script for each field, with a parameter specifying the Field Name. The script then acted on the named field. However, renaming the field breaks the parameter reference (and it ain't elegant).
By simply NOT referencing the field name in a Set Field script step, the script acts on whatever field triggered it.
SetField: Substitute ( Get ( ActiveFieldContents ); "/"; "\\" ))
SetField: Get ( ActiveFieldContents ) & If ( Right ( Get (ActiveFieldContents ); 1) = "\\"; ""; "\\" )