Hi @isocam
I made some edits to your code...
Try this:
Public Function GetCutLengths()
Dim oDoc As Inventor.AssemblyDocument
Set oDoc = ThisApplication.ActiveDocument
Dim oCompDef As Inventor.ComponentDefinition
Set oCompDef = oDoc.ComponentDefinition
Dim sMsg As String
Dim iLeafNodes As Long
Dim iFunctionAssemblies As Long
Dim oCompOcc As ComponentOccurrence
For Each oCompOcc In oCompDef.Occurrences
If oCompOcc.DefinitionDocumentType = kPartDocumentObject Then
iLeafNodes = iLeafNodes + 1
Call Bounding_Box_Height(oCompOcc)
Else
iFunctionAssemblies = iFunctionAssemblies + 1
Call ProcessAllFunctionOcc(oCompOcc, sMsg, iLeafNodes, iFunctionAssemblies)
End If
Next
oDoc.Update
oDoc.Save
End Function
Private Function ProcessAllFunctionOcc(ByVal oCompOcc As ComponentOccurrence, ByRef sMsg As String, ByRef iLeafNodes As Long, ByRef iFunctionAssemblies As Long)
Dim oFunctionCompOcc As ComponentOccurrence
For Each oFunctionCompOcc In oCompOcc.SubOccurrences
If oFunctionCompOcc.DefinitionDocumentType = kPartDocumentObject Then
iLeafNodes = iLeafNodes + 1
Call Bounding_Box_Height(oFunctionCompOcc)
Else
sMsg = sMsg + oFunctionCompOcc.Name + vbCr
iFunctionAssemblies = iFunctionAssemblies + 1
Call ProcessAllFunctionOcc(oFunctionCompOcc, sMsg, iLeafNodes, iFunctionAssemblies)
End If
Next
End Function
Private Function Bounding_Box_Height(ByRef oCompOcc As ComponentOccurrence)
Dim oDoc As Object
Dim oparams As Parameters
Dim oparam As Parameter
Set oDoc = oCompOcc.Definition.Document
Set oparams = oDoc.ComponentDefinition.Parameters
If (TypeOf oDoc Is PartDocument) And (oDoc.IsModifiable) And (oDoc.DocumentInterests.HasInterest("{AC211AE0-A7A5-4589-916D-81C529DA6D17}")) Then
Dim maxz As Double
Dim minz As Double
Dim height As Double
maxz = oCompOcc.Definition.RangeBox.MaxPoint.Z
minz = oCompOcc.Definition.RangeBox.MinPoint.Z
height = maxz - minz
For Each oparam In oparams.UserParameters
If oparam.Name = "G_L" Then oparam.Value = height
Next oparam
End If
End Function