Изменение кода счета для запуска независимо от сабвуфера в CATIA - PullRequest
0 голосов
/ 28 апреля 2020

Я работаю над модификацией большого количества существующего кода, и после попытки go пройти через него, я сильно забочусь о том, что я знаю о VBA. Мой опыт написания кода в основном Python, и мне трудно обернуть голову вокруг структуры объекта и того, что является и не приемлемо в VBA.

Я пытаюсь изменить добавленные пользователем свойства (Добавить Дополнительные свойства в меню Свойства) для данного элемента, который выбирается пользователем. Этот код, как самостоятельный, будет делать то, что я ищу, хотя его интеграция в существующий код оказывается сложной. Как мне изменить следующий код так, чтобы я мог использовать его так, чтобы он не обязательно находился в своей собственной подпрограмме?

Sub CATMain()

    GetNextNode CATIA.ActiveDocument.Product

End Sub



Sub GetNextNode(oCurrentProduct As Product)

    Dim oCurrentTreeNode As Product
    Dim i As Integer

    ' Loop through every tree node for the current product
    For i = 1 To oCurrentProduct.Products.Count
        Set oCurrentTreeNode = oCurrentProduct.Products.Item(i)

        ' Determine if the current node is a part, product or component
        If IsPart(oCurrentTreeNode) = True Then
            MsgBox oCurrentTreeNode.PartNumber & " is a part"

        ElseIf IsProduct(oCurrentTreeNode) = True Then
            MsgBox oCurrentTreeNode.PartNumber & " is a product" & i

        Else
            MsgBox oCurrentTreeNode.PartNumber & " is a component"
        End If


        ' if sub-nodes exist below the current tree node, call the sub recursively
        If oCurrentTreeNode.Products.Count > 0 Then
            GetNextNode oCurrentTreeNode
        End If

        If oCurrentTreeNode.Products.Count = 0 Then
            oCurrentTreeNode.ReferenceProduct.UserRefProperties.Item(1).Value = "Yippee!!!!!"
        End If

   Next


End Sub

Это моя попытка, и она игнорируется, когда Я поместил это в наш текущий текст. План состоит в том, чтобы заменить текущий способ, которым мы модифицируем существующие свойства, чтобы он мог читать через деревья CATIA и модифицировать отдельные детали и продукты. Кроме того, я попытался добавить createstring для создания нового пользовательского свойства для того, которого там нет. Это возвращает ошибку о том, что программа ожидает =. Любая помощь с благодарностью.

Dim oCurrentProduct As Product
Dim oCurrentTreeNode As Product
Dim i As Integer

' Loop through every tree node for the current product
For i = 1 To oCurrentProduct.Products.Count
    Set oCurrentTreeNode = oCurrentProduct.Products.Item(i)

    ' Determine if the current node is a part, product or component
    If IsPart(oCurrentTreeNode) = True Then
        MsgBox oCurrentTreeNode.PartNumber & " is a part"

    ElseIf IsProduct(oCurrentTreeNode) = True Then
        MsgBox oCurrentTreeNode.PartNumber & " is a product" & i

    Else
       MsgBox oCurrentTreeNode.PartNumber & " is a component"
    End If


    ' if sub-nodes exist below the current tree node, call the sub recursively
    If oCurrentTreeNode.Products.Count > 0 Then
        GetNextNode oCurrentTreeNode
    End If

    If oCurrentTreeNode.Products.Count = 0 Then
       oCurrentTreeNode.ReferenceProduct.UserRefProperties.Item(1).Value = "Yippee!!!!!"
       oCurrentTreeNode.ReferenceProduct.UserRefProperties.CreateString(Value, "Input")
    End If

Next

1 Ответ

1 голос
/ 28 апреля 2020

Похоже, CreateString возвращает объект свойства. Попробуйте использовать это так:

' Use this line where you want to make a new property
SetUserProperty oCurrentTreeNode.ReferenceProduct, "Input", "Yippee!!!!!"


Public Sub SetUserProperty(ByVal myProduct As Product, ByVal code as String, ByVal newValue as String)
    Dim myUserProperties As Object 'As Parameters
    Dim myUserProperty As StrParam

    Set myUserProperties = myProduct.UserRefProperties
    Set myUserProperty = myUserProperties.CreateString(code, "")
    myUserProperty.ValuateFromString newValue
End Sub 
...