Announcements
Attention for Customers without Multi-Factor Authentication or Single Sign-On - OTP Verification rolls out April 2025. Read all about it here.
bespel
in reply to: bespel

Now i have improved a little.

Sub Main
    Dim oDoc As AssemblyDocument
    oDoc = ThisApplication.ActiveDocument
    
    ' Set a reference to the BOM
    Dim oBOM As BOM
    oBOM = oDoc.ComponentDefinition.BOM
    


    'Set a reference to the "Structured" BOMView
    Dim oBOMView As BOMView
'replace to Parts Only BOM View
    oBOMView = oBOM.BOMViews.item("Parts Only")
    
    'rename dictionary to 'Materials' and replace references to 'Colors' with 'Materials'
    Dim Materials As Object
    Materials = CreateObject("Scripting.Dictionary")
    
    'replace with matching sub/function name as below (and proper arguments here)
    'see above note about colors...
    Call BOMweightIteration(oBOMView.BOMRows, Materials)
'    
'    'see above note....
'    'ensure that this spits out the proper string
'    'convert it to adding the string value to a custom iproperty instead of to a msgbox.
    For Each item In Materials
msg = "Materials: " & item & " Area: " & Materials(item) &  Iif(msg <> "",vbCrLf & msg,"")
    Next
	
    MsgBox(msg)

End Sub

''rename to BOMweightIteration
Private Sub BOMweightIteration(oBOMRows As BOMRowsEnumerator, Materials As Object, Optional SubQty As Integer = 1)
    On Error Resume Next
    ' Iterate through the contents of the BOM Rows.
    Dim i As Long
    For i = 1 To oBOMRows.count
        ' Get the current row.
        Dim oRow As BOMRow
        oRow = oBOMRows.item(i)
  
        'Set a reference to the primary ComponentDefinition of the row
        Dim oCompDef As ComponentDefinition
        oCompDef = oRow.ComponentDefinitions.item(1)
        
        'grab Materialss name from comp def

        'Change this if statement to a check to see if the part Materialss exists in the dictionary
        If (oCompDef.Document.DocumentType = kPartDocumentObject) Then

        'If it does
              'add the weight of the line to the weight of the Materialss in the library
        'if it doesn't
              'add the weight and Materialss name of the line to the dictionary
         

            'remove face stuff as it's irrelevant
           
        End If

        'PartsOnly is flat, so remove recursion...
        'Recursively iterate child rows if present.
        If Not oRow.ChildRows Is Nothing Then Call BOMweightIteration(oRow.ChildRows, Materials, oRow.ItemQuantity * SubQty)
    Next
End Sub 

 

 

gettin this:

 

ed.jpg