You won't be able to pass in the variable name as a parameter and utilize it directly as you were trying in your example above.
Instead, you could pass in the variable name as a string, and parse it...something like
Function Change_var( c:object, variable_name:string, new_value:int)
select( variable_name)
case: "x"
Emitter(c).x = new_value 'casting to type (emitter in this case) is required
case: "y"
Emitter(c).y = new_value
case: "x velocity"
Emitter(c).vx = new_value
endselect
endfunction
Of course, that is sort of ugly and would only really be useful if you only wanted to have a single message box for the user to enter in values. They'd have to type in something like "x 35" into the box, and then when an object is clicked you'd have to parse the text in the message box (in this case tokenizing it with " " as a delimeter) and then pass the object, first token, and second token to the Change_Var() function. An inelegant solution, no doubt.
The other approach is to utilize a single message_box per adjustable variable. Then you can call Change_Var (or maybe more appropriately named Update_Emitter), and that function can grab the values it needs from the appropriate message boxes and update the object accordingly. You'd need one message box per adjustable variable in this case.
Actually, I would make Update_Emitter() a method of the Emitter class instead of a function. Then, when an object is clicked, you don't need to pass Self to a generic function, but instead call Update_Emitter() on the clicked object.
Hopefully I've understood your intentions and hopefully this helps a bit.