Изменение пользовательских свойств CATIA на основе экземпляра с использованием выбора

Я попал в затруднительное положение, я занимаюсь этим уже неделю и продолжаю сталкиваться с той же проблемой. Я использую CATIA V5R26 и пытаюсь изменить определенные пользователем свойства (Определить другие свойства), выбрав продукт/деталь в CATIA и запустив макрос.

На данный момент это то, что у меня есть

Set Pull_document2 = CATIA.ActiveDocument.Selection
Part_Number_Name = Pull_document2.Item(1).LeafProduct.ReferenceProduct.Name

CATIA.ActiveDocument.Selection.Item(1).LeafProduct.ReferenceProduct.UserRefProperties.Item(Part_Number_Name & "\Properties\DESIGNER").Value = "Yeet"

Это дает 2 проблемы, я все еще не могу изменить уровень 2 или другие атрибуты. Это работает только на верхнем уровне. Кроме того, есть 11 определяемых пользователем свойств, которыми я пытаюсь манипулировать, и код будет выполнять только 3. Я пробовал много разных маршрутов, а также использовал код других людей, который они используют, и по какой-то причине это не работает.

Что нужно сделать, чтобы это работало на нескольких уровнях? Почему это может изменить только 3 из 11 пользовательских свойств?


person aaron    schedule 27.04.2020    source источник
comment
Хотел бы помочь, звучит интересно. Может быть, информация, найденная здесь, может помочь? stackoverflow.com/questions/47574338/   -  person ionizing    schedule 27.04.2020
comment
Это должно быть просто фрагмент. Я не вижу Option Explicit или каких-либо подписок. Я рекомендую использовать объекты и блоки With, чтобы сократить ссылки. У вас слишком много точек .   -  person HackSlash    schedule 27.04.2020
comment
Очень маленький фрагмент, общий код составляет около 4500 строк.... Я обновляю его, чтобы он не указывал прямо на очень конкретное имя и пытался преобразовать его в обобщение и иметь возможность обновлять записи в Определить другое Свойства любого выбранного объекта.   -  person aaron    schedule 27.04.2020
comment
Хорошо, разбейте это действие на функцию, а затем опубликуйте полную функцию. Шаг за шагом, знаете ли.   -  person HackSlash    schedule 27.04.2020
comment
Я опубликую еще один пост через секунду, я не могу публиковать столько, потому что я под NDA.   -  person aaron    schedule 27.04.2020
comment
Есть ли способ открыть прямой чат? Код слишком длинный даже для фрагментов.   -  person aaron    schedule 27.04.2020
comment
Итак, есть 3, которые не работают, и 2 из них, я думаю, я знаю, почему, и это потому, что они привязаны к коду в другом месте. Третий, который не является переключателем, который либо ДА, либо НЕТ. Он управляется пользовательской формой, и единственное, что он меняет, — это входное значение.   -  person aaron    schedule 27.04.2020


Ответы (1)


Одна проблема заключается в том, что вы основываете это на выборе. Если пользователь выберет неправильный тип объекта, он выдаст ошибку.

Тем не менее, попробуйте это:

Set Pull_document2 = CATIA.ActiveDocument.Selection
Set ProducRef = Pull_document2.Item(1).LeafProduct.ReferenceProduct
With ProducRef.UserRefProperties
    .Item("DESIGNER").Value = "Yeet"  ' This is how I think it should work
    .Item(.Name & "\Properties\DESIGNER").Value = "Yeet"  ' This is based on the code you had
End With

Внутри этого блока With вы сможете перечислить все свойства, которые хотите изменить.

person HackSlash    schedule 27.04.2020
comment
То есть работает почти. Это сделает 7 из 11 свойств. Я очень ошеломлен прямо сейчас, потому что я пробовал ту же самую структуру как один длинный текст снова и снова, и это никогда не получалось.... - person aaron; 27.04.2020
comment
Возможно, у вас неправильное имя свойства или свойство доступно только для чтения. Вы можете использовать do-loop, чтобы распечатать имя каждого свойства, чтобы вы могли видеть фактические имена. После того, как вы проверили имена, вы можете посмотреть в руководстве, чтобы узнать, доступны ли остальные свойства только для чтения. - person HackSlash; 27.04.2020
comment
Я новичок, когда дело доходит до VBA в CATIA. Будет ли этот цикл do записан как CATIA.ActiveDocument.Selection.Item(i).Value.Name?? - person aaron; 27.04.2020
comment
Извините, я должен написать всю мысль. ' пока я в CATIA.ActiveDocument.Selection.Item(i).Value.Name?? i = i+1 wend ' Я пытался отформатировать это в блоке кода, я не знаю, как правильно использовать мини-уценку. - person aaron; 27.04.2020
comment
нет имени значения. Это было бы просто имя. Прочитайте это: coe.org/p/fo/et/thread=15608 - person HackSlash; 27.04.2020
comment
Хорошо, я посмотрю на это, когда я вернусь на работу завтра. Есть ли у вас какие-либо предложения по тому, как заставить это работать на уровне 2 или выше в дереве продуктов? - person aaron; 27.04.2020
comment
Каждый уровень имеет свой набор правил. Только документация может рассказать вам то, что вам нужно знать. Прочтите API для этой части дерева - person HackSlash; 28.04.2020
comment
Можно ли перемещаться по дереву с помощью выбора? Например, у меня есть продукт1 ---> продукт2 ----> продукт3, который может иметь разные имена в зависимости от пользователя. Возможно ли, чтобы он запускал код, который вы мне дали, в зависимости от того, какую часть или продукт выбирает пользователь? Я правильно понимаю, что код в ссылке, которую вы мне дали, можно изменить для выполнения этой задачи? - person aaron; 28.04.2020
comment
Да, вам нужен код, который проверяет выбор и уведомляет пользователя, если выбор недействителен. Я думаю, что этот вопрос лучше подходит для такого форума, как форум COE. StackOverflow предназначен для исправления одной проблемы с вашим кодом, а не для того, чтобы спрашивать, как что-то сделать. - person HackSlash; 28.04.2020
comment
Хорошо, я прочитал ссылку, которую вы мне прислали, и оказалось, что информация для этого есть. Мне нужно будет скомпилировать все, что вы мне дали, и обработать это, чтобы я мог задать хорошо продуманный вопрос о СЕ. Спасибо за вашу помощь! - person aaron; 28.04.2020
comment
Я прочитал ссылку, которую вы мне дали, и это сделает именно то, что я пытался сделать. Однако интеграция борется, как отдельный макрос, он работает. Когда я отбрасываю подписки как вызовы, код, кажется, игнорирует их. Есть причина для этого? - person aaron; 28.04.2020
comment
Пожалуйста, откройте новый вопрос. Покажите полную процедуру и фрагмент, показывающий все переменные, используемые в вызове процедуры. Это комментарии к ответу. - person HackSlash; 28.04.2020