Hi,
You have to remember what Recursion does. Recursion is a routine which "Calls Itself" so when you say Exit Sub all you are doing is Exiting the Current iteration of the recursion. The way to get round this is to create a Class Level Boolean variable or a Static Boolean variable in the routine, called bolCancel, which can then be tested for within the routine. If you then set this variable to True then all iterations of the routine will fire the Exit Sub statement until the recursion has been exited.
Hope that helps.
Cheers,
Ian