That prevents you from using properly named report objects.
Not sure what you're talking about but my combo's RowSources are always populated using queries and never with code.
Keeping a table as I (and others) described earlier solves the "sub" problem since you only ever want to see main forms/reports. The table also gives you the opportunity to use good object names as well as friendly user names which just using MSysObjects doesn't support. I don't ever run into the other problem because I don't allow two forms to ever be open at the same time unless one is in dialog mode so it has to be closed for control to return to the other form. If you do allow multiple active forms (sure hope your users are on the ball), then I suppose you could use a table where each form adds its name when it opens and deletes it as it closes. That lets you avoid all the confusing code and just use queries to control the menu lists. Also, in Northwind some (but not all) forms allow multiple instances of the same form to be open. That actually makes more sense than allowing multiple different forms to be open. The only use case where I could envision a user having to have multiple forms open is if one is being used for reference and that worries me that there might be a design flaw.