Public Sub AssemblyCount() ' Set reference to active document. ' This assumes the active document is an assembly Dim oDoc As Inventor.AssemblyDocument Set oDoc = ThisApplication.ActiveDocument ' Get assembly component definition Dim oCompDef As Inventor.ComponentDefinition Set oCompDef = oDoc.ComponentDefinition Dim sMsg As String Dim iLeafNodes As Long Dim iSubAssemblies As Long ' Get all occurrences from component definition for Assembly document Dim oCompOcc As ComponentOccurrence Debug.Print "--- Assembly: " & oDoc.DisplayName For Each oCompOcc In oCompDef.Occurrences If Not oCompOcc.IsSubstituteOccurrence Then If oCompOcc.Suppressed Then Debug.Print "suppressed: " & oCompOcc.Name iLeafNodes = iLeafNodes + 1 Else ' Check if it's child occurrence (leaf node) If oCompOcc.SubOccurrences.Count = 0 Then 'empty SubAssembly - do nothing Else iSubAssemblies = iSubAssemblies + 1 Call processAllSubOcc(oCompOcc, _ sMsg, _ iLeafNodes, _ iSubAssemblies) ' subassembly End If End If End If Next Debug.Print Debug.Print "No of suppressed nodes : " + CStr(iLeafNodes) Debug.Print "No of sub assemblies : " + CStr(iSubAssemblies) End Sub ' This function is called for processing sub assembly. It is called recursively ' to iterate through the entire assembly tree. Private Sub processAllSubOcc(ByVal oCompOcc As ComponentOccurrence, _ ByRef sMsg As String, _ ByRef iLeafNodes As Long, _ ByRef iSubAssemblies As Long) Dim oSubCompOcc As ComponentOccurrence Debug.Print "--- SubAssembly: " & oCompOcc.Name For Each oSubCompOcc In oCompOcc.SubOccurrences If Not oSubCompOcc.IsSubstituteOccurrence Then If oSubCompOcc.Suppressed Then Debug.Print "suppressed: " & oSubCompOcc.Name iLeafNodes = iLeafNodes + 1 Else ' Check if it's child occurrence (leaf node) If oSubCompOcc.SubOccurrences.Count = 0 Then 'empty SubAssembly - do nothing Else sMsg = sMsg + oSubCompOcc.Name + vbCr iSubAssemblies = iSubAssemblies + 1 Call processAllSubOcc(oSubCompOcc, _ sMsg, _ iLeafNodes, _ iSubAssemblies) End If End If End If Next End Sub