Часть "имя" действительно является номером детали и изменяется с помощью свойства "PartNumber".
Так что попробуйте изменить
PartName.ReferenceProduct.Name= NewPName + CStr(NewPNumber)
до
PartName.ReferenceProduct.PartNumber= NewPName + CStr(NewPNumber)
Это не влияет на имя документа, если вы еще не сохранили свою часть.
Что еще:
1) Ваше именование переменных сбивает с толку. Вы называете продукт «InstName» в одном месте, а «PartName» в другом. На первый взгляд я подумал, что это струны. Использование oProduct было бы менее запутанным.
2) Вы, похоже, уверены, что пользователь предварительно выбрал правильные типы. Поскольку вы выбираете в сборке, вместо использования Selection.Item (i) .Value, вы можете использовать Selection.item (i) .LeafProduct , который всегда будет продуктом экземпляра любого выбранного объекта. Даже если пользователь выберет поверхность, он вернет экземпляр продукта, который содержит выбранную поверхность.