Вызов свойств ссылки на пользователя в CATIA с использованием VBA

Я хочу вызвать свойства, на которые ссылаются пользователи, в CATIA. В настоящее время я могу сделать это через прямой путь, используя:

xyz = CATIA.Activedocument.product.UserRefProperties.Item("DESIGNER").Value
MsgBox (xyz),0

Я пытаюсь обобщить, чтобы отображалась вся информация, которую пользователь выбирает в окне. Я могу сделать что-то похожее на то, что моя цель использует такой код:

abc = CATIA.ActiveDocument.Selection.Item(1).Value.Name
MsgBox (abc),0

Это доходит до моей проблемы. Приведенный выше код будет вызывать свойства, определенные системой, на основе выбора, однако это не будет работать со свойствами, определенными пользователем.

Как я могу изменить этот код, чтобы получить информацию, хранящуюся в определяемом пользователем свойстве, и отобразить ее?


person aaron    schedule 21.04.2020    source источник


Ответы (1)


У вас могут возникнуть проблемы из-за того, что, начиная с подструктуры уровня 2, ваш выбор содержит не ссылку, а экземпляр, попробуйте этот код (я отображаю 1-е добавленное пользователем свойство выбранного продукта)

MsgBox CATIA.ActiveDocument.Selection.Item(1).LeafProduct.ReferenceProduct.UserRefProperties.Item(1).ValueAsString
person Zzirconium    schedule 23.04.2020
comment
Вы на что-то, кажется, что файл хранит экземпляр. Когда я попробовал это для записи свойств, которые я хочу, ничего не произошло. Что стало причиной несчастья? - person aaron; 24.04.2020
comment
это еще одна проблема, чем ваш первоначальный вопрос. Вы должны создать еще один или отредактировать его. Кстати, разрешение на запись продуктов зависит от многих факторов. Какой у вас параметр? Строковые или размерные (например, длина, масса и т. Д.)? - person Zzirconium; 27.04.2020
comment
Это строка для всех входов. - person aaron; 27.04.2020
comment
Он работает с моими тестовыми данными: Item(1).Value=foo. Можете ли вы дать мне код, который вы используете для написания калуэ. А также добавьте скриншот дерева структуры вашего продукта в свой исходный вопрос (просто вставьте изображение, оно загрузит его в imgur и предложит вам добавить его в SO) - person Zzirconium; 27.04.2020
comment
Я попробовал код, который вы мне дали, и он просто игнорируется системой. Я тоже модифицировал его и попытался ввести прямые поля, но он по-прежнему игнорируется..... Честно говоря, я не знаю, почему, но кажется, что мой код постоянно игнорируется и предпочитает работать только в некоторых случаях. Назначение DoEvents ничего не меняет. - person aaron; 27.04.2020
comment
Это то, что я пытался использовать для записи данных. 'Dim Pull_document2 As Selection Set Pull_document2 = CATIA.ActiveDocument.Selection Document_Entry = Pull_document2.Item(1) CATIA.Documents.Item(Document_Entry).product.Parameters.Item(\Properties\XYZ).Value = Y1U' Это то, что я использовать для вызова данных. 'Set Pull_document2 = CATIA.ActiveDocument.Selection Part_number_name = Pull_document2.Item(1).Value.PartNumber Document_Entry = Part_number_name & .CATProduct DESIGNER_INPUT.Text = CATIA.Documents.Item(Document_Entry).product.Parameters.Item(Properties\XYZ) .ValueAsString'' - person aaron; 27.04.2020
comment
Извините за несколько сообщений, ограничение по количеству символов. Структура, которую я использую, это просто Продукт 1 --- › Продукт 2. Ничего особенного, так как это для целей тестирования. - person aaron; 27.04.2020
comment
Опять же, вы должны добавить свои попытки кода и проблему, отредактировав свой вопрос, используя {} для форматирования разделов кода. Ваш код, кажется, делает некоторые ссылки на таинственные переменные и объекты (DESIGNER_INPUT.Text ??) - person Zzirconium; 27.04.2020
comment
Понятно, я новичок на этом сайте, попробую. Ни один из моих кодов не работал. Я умею тянуть, и я очень не знаком с этой программой. Я думаю, будет проще объяснить, что я делаю..... Пользователь выбирает деталь/продукт Пользователь запускает наш макрос, макрос извлекает существующую информацию (пока это работает) на любом уровне Пользователь вводит данные для выбранной детали/продукта. продукт любого уровня. При нажатии на ввод пользовательские свойства обновляются. (Вот где я борюсь) Попытка кода {CATIA.ActiveDocument.Selection.Item(1).product.Parameters.item(DESIGNER).value = введенное значение} - person aaron; 27.04.2020
comment
Я снова попробовал ваш код, и он работает с пользовательскими свойствами верхнего уровня. Однако на уровне 2 и 3 это ничего не меняет. {CATIA.ActiveDocument.Selection.Item(1).LeafProduct.ReferenceProduct.UserRefProperties.Item(DESIGNER).Value = SUCK IT CATIA} - person aaron; 27.04.2020
comment
Вы уверены, что ваш товар (КОНСТРУКТОР) работает? Потому что, если свойство называется DESIGNER, а имя вашего продукта (ссылка) — MySubProduct, вы должны использовать Item(MySubProduct\Properties\DESIGNER) - person Zzirconium; 27.04.2020
comment
Понятно, так что с листовым продуктом мне нужно что-то вызывать в экземпляре, который все еще выбран? - person aaron; 27.04.2020
comment
да, вы можете использовать что-то вроде Item(CATIA.ActiveDocument.Selection.Item(1).LeafProduct.ReferenceProduct.Name + \Properties\DESIGNER) - person Zzirconium; 27.04.2020
comment
Итак... Вот что у меня есть. Это только меняет верхний уровень. {Тусклый Pull_document2 как выбранный} ..........{Set Pull_document2 = CATIA.ActiveDocument.Selection} ..........{Part_Number_Name = Pull_document2.Item(1).LeafProduct.ReferenceProduct. Имя} ............{CATIA.ActiveDocument.Selection.Item(1).LeafProduct.ReferenceProduct.UserRefProperties.Item(Part_Number_Name & \Properties\DESIGNER).Value = .....Coding в CATIA отстой} - person aaron; 27.04.2020
comment
Кроме того, похоже, возникла другая проблема, и это проблема, с которой я сталкивался раньше. Та же строка кода, измененная только для имени свойства, изменяет только 3 из 11 записей. Все они обозначены строками. Все они имеют одну и ту же строку кода, только слово ДИЗАЙНЕР меняется на что-то вроде НАЗВАНИЕ. - person aaron; 27.04.2020
comment
Используете ли вы проект VBA для своего макроса? Или ВБ или ВБС? Я рекомендую вам использовать VBA, так как вы сможете отлаживать свой код и просматривать значения переменных в реальном времени (особенно в отношении разрешений на запись параметров, поскольку это может быть проблемой, которая объясняет некоторые работы, а некоторые нет). Я бы рекомендовал вам использовать Пункт(1), Пункт(2); Item(3)... вместо версии Item(name), так как это устранит все сомнения относительно правильного форматирования имени. Вы можете использовать словарь для хранения нужного имени/значения, затем зациклить на элементах UserRefProperty и установить значение словаря в соответствии с ключом - person Zzirconium; 28.04.2020
comment
Я использую VBA, я никогда не думал об использовании элемента (i). Это будет хорошо работать, если я смогу правильно вызвать экземпляр продукта. - person aaron; 28.04.2020