А видишь ли какие-нибудь ошибки, если уберешь On Error Resume Next ?
(кроме индикации повторного создания того же LODа)
Попробуй разделить решение задачи на два этапа.
1. Создание нужного LOD в каждой из подсборок + настройка этого уровня детализации (как опция) + обязательное сохранение всех документов подсборок.
Рекурсивно перебирать компоненты не требуется. У главной сборки есть свойство AllReferencedDocuments, которое возвращает список всех подчиненных документов. Делаешь по ним цикл, фильтруя сборки, и создаешь в них требуемый LOD (+обязательный Save). Не забудь сделать то же самое в главной сборке. После окончания этапа 1 не только в главной, но и во всех дочерних подсборках гарантированно имеется нужный LOD. Сколько вхождений имеет конкретная подсборка – роли уже не играет.
2. Настройка в дереве главной сборки связей по конкретному уровню детализации.
- Активируешь свой уровень детализации «К» в главной сборке.
- Перебирая рекурсивно компоненты дерева главной сборки, во всех найденных подсборках активируешь свой уровень детализации «К». Update + Save после изменений
- + SaveAll через CommandManager.
Как-то так…
Замечал, что после активации другого LODа крайне полезно сразу же сделать update и обновить ссылки на свойства определения сборки (напр., заново получить ссылки на коллекцию компонентов Occurrences – что-то там в определении сборки непростое происходит).
Альтернативный подход заключается в создании компонента-подсборки сразу в заданном уровне детализации AddWithOptions(). Но этим пользоваться не всегда удобно.