You are still calling the public procedure from outside of the containing form. ?
And switching to design view should fire the close and unload events. I haven't tested it but I would expect that to cancel any loop (of course a loop will lock the form unless you've used doevents and that would be a design rather than a user issue).

I'm not seeing a real world problem here. I'd be interested if you do have an example.