Like you, I prefer a clean/tidy interface, and when control is passed from one form to another, I like the first to disappear leaving no confusion as to where the operator is at, at any time. This doesn't seem to be provided easily though. Let me give you some ideas to consider.
In a hierarchical structure, which I prefer - particularly for my menu systems, it is necessary for the menus earlier in the process to return, after the sub-menus (Not referring to Access Sub-Forms here) have been finished with, to the point of departure. In other words, to the point they were at just prior to relinquishing control to the sub-menu. For this to occur then, rather than closing the form, it need simply be hidden. When the called form (sub-menu) gets closed, it should be programmed to unhide the form that called it into being.
For closing the form, should you decide you still need to, you haven't posted any examples of code you've tried. That would have been helpful. However, the simple code is :
This can be more powerful, but when called with no parameters, closes the object where the code is found.