Catia V5 Macro: неполная функция переименования

Я имел дело с этим некоторое время и даже получил помощь, но я не могу решить это. Следующий макрос переименовывает PartName или InstanceName в зависимости от пользователя и CADSelection.

Проблема в том, что он не работает в PartName переделке. Может ли кто-нибудь помочь мне завершить этот макрос? а в идеале объяснить, что я сделал не так?

Sub CATMain()

  If CATIA.Documents.Count = 0 Then
    MsgBox "There are no CATIA documents open. Please open a CATIA document and try again.", ,msgboxtext
    Exit Sub
  End If

  If InStr(CATIA.ActiveDocument.Name, ".CATProduct") < 1 Then
    MsgBox "The active document is not a Product. Please open a CATIA Product and try again.", ,msgboxtext

    Exit Sub
  End If

  Dim oSelection As Selection
  Set oSelection = CATIA.ActiveDocument.Selection

  If oSelection.Count < 1 then
    MsgBox "Pick some components using cad selection."
  Else
    '****** Alter Instance Name *****'
    Dim msg
    msg = MsgBox ("Click ""Yes"" to change Instance Name, ""No"" to change Part Name or ""Cancel"" to exit", _
       vbYesNoCancel, "Renaming Tool")

    if vbYes = msg then
      '****** Inputbox for Instance name alteration *****
      Dim NewIName As String
      NewIName = InputBox("Please input the desired Instance Name. Example: E","Instance name alteration","E")
      '****** Inputbox for Instance number alteration *****
      Dim NewINumber As Integer
      NewINumber = InputBox("Please input the initial number for the 1st component. Example: 1","Instance numbering alteration","1")

      Dim oIBody
      Dim InstName As Body
      For oIBody = 1 to oSelection.Count
         Set InstName = oSelection.Item(oIBody).Value
         '****** Instance name alteration *****
         InstName.Parent.Parent.ReferenceProduct.Products.Item( _
                  InstName.Name).Name= NewIName + CStr(NewINumber)
         NewINumber=NewINumber+1
      Next
    elseif vbNo = msg then
      '****** Inputbox for Part name alteration *****
      Dim NewPName As String
      NewPName = InputBox("Please input the desired Part Name. Example: E","Part Name alteration","E")

      '****** Inputbox for Part number alteration *****
      Dim NewPNumber As Integer
      NewPNumber = InputBox("Please input the initial number for the 1st Component. Example: 1","Part numbering alteration","1")

      Dim oPBody
      Dim PartName As Body

      For oPBody = 1 to oSelection.Count
        Set PartName = oSelection.Item(oPBody).Value

        '****** Part name alteration *****
        PartName.ReferenceProduct.Name= NewPName + CStr(NewPNumber)
        NewPNumber=NewPNumber+1
      Next
    End If
  End If

  oSelection.Clear
End Sub

person Castella    schedule 26.04.2018    source источник


Ответы (1)


«Имя» детали на самом деле является номером детали и изменяется с помощью свойства «PartNumber».

Так что попробуй изменить

PartName.ReferenceProduct.Name= NewPName + CStr(NewPNumber)

to

PartName.ReferenceProduct.PartNumber= NewPName + CStr(NewPNumber) 

Это не влияет на имя документа, если только вы еще не сохранили свою часть.

Что-то еще :

1) Ваше имя переменной сбивает с толку. Вы называете продукт "InstName" в одном месте и "PartName" в другом. Я сначала подумал, что это струны. Использование oProduct было бы менее запутанным.

2) Вы, кажется, действительно уверены, что пользователь предварительно выбрал правильные типы. Поскольку вы выбираете в сборке, вместо использования Selection.Item(i).Value вы можете использовать Selection.item(i).LeafProduct, который всегда будет экземпляром любого выбранного объекта. . Даже если пользователь выберет поверхность, он вернет экземпляр продукта, содержащий выбранную поверхность.

person C R Johnson    schedule 26.04.2018
comment
Спасибо, ваше предложение полностью решило мою проблему. Чтобы пояснить, почему мой код выглядит так: 1) Идея заключалась в том, чтобы иметь возможность редактировать либо имя экземпляра, либо имя части хотя бы одного CATPArt / CATProduct. Также требовалась простота кода. 2) Выбор CATPArts/CATProducts для изменения осуществляется специально в дереве спецификаций. - person Castella; 28.05.2018