It could be that the event is being fired, but since the input parameter is called State, and the case statement variable is rInt_FTPState, the Case statement doesn't do anything. Either change the Parameter name, or the case statement variable.
There is no reason to have the .Cancel method where you have it. I would however, put the .Cancel in the error handling section of the StateChange event.
I don't know what the FTP server on the other end is doing, but I perfer on the PUT command to explicity identify the location and name of the file that I'm copying up. Good Luck
--------------
As a circle of light increases so does the circumference of darkness around it. - Albert Einstein