@michael_janssenCN38L. That makes perfect sense. You are not wrong to want reduced file sizes, and not wrong about however you want to accomplish that result. Reduced file size is another way to get better performance. Less stuff for Inventor to be thinking about at one time, and less stuff being held in its working memory set, equals faster processing, less lag, and happier users.
At our company, some of our assemblies do get pretty large, sometimes many thousands of components. However, not all of those components need to be present / available at all times while working on the main assembly. So sometimes we will create one or more custom ModelStates just for recording that we want some of the large sub assemblies to be suppressed. Then we will have that ModelState active while we work on other aspects of the main assembly that are not directly interacting with those suppressed sub assemblies. And when we want to be working with those large sub assemblies, we may have a different ModelState active in which some other sub assemblies or components are suppressed. So, different ModelStates have different areas of the assembly included or not included. This process does not include any 'substitutes', just suppression of components (and/or features and other things related to the suppressed stuff). Since there are no substitutes, there are no extra files just for those substitute versions of any of the components. Seems simpler to me, but then again file size is not really something that we think much about at my company, and suppression along may not actually reduce file size like substitution may, so this is just an opinion.
However, we do use something a bit different than some might. For instance, some purchased items which are complex in design, and would normally be an assembly, we have created 'resizable', multi-body part documents of, as configuration based template parts. So, what would normally be an assembly component representing a large, complex sub assembly, is actually an internally configured single part type component, with all most of the same detail as the assembly would have (these will often be seen in product layouts by customers in design reviews, prior to production release). This may or may not improve performance or reduce file size, but it it super efficient for us, and greatly reduces the number of files being referenced by our main assemblies.
But every company is different, so there is likely no right or wrong way here. Just what works best for you and your company. If what you saw in the VBA sample looks like what you want, then we can convert that to iLogic, change what needs to be changed, and try that. But if the second process that I mentioned sounds more correct then it will be a more complex overall task, and some manual actions may need to be taken first (creating a substitute ModelState for each of the purchased components, within each of those purchased components).
Wesley Crihfield
(Not an Autodesk Employee)