06-30-2023
10:19 AM
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report
06-30-2023
10:19 AM
VBA doesn't support lambda expressions so we'll have to rewrite the function to instead loop through the ComponentOccurrencesEnumerator to check if there's already an occurrence with the name.
Something like this should work ![]()
Option Explicit
Dim name As String
Dim num As Integer
Dim existingOccs As ComponentOccurrencesEnumerator
Sub Main()
Dim def As AssemblyComponentDefinition
Set def = ThisApplication.ActiveDocument.ComponentDefinition
Set existingOccs = def.Occurrences.AllReferencedOccurrences(def)
num = 1
name = "Part"
Dim oOcc As ComponentOccurrence
For Each oOcc In def.Occurrences
TraverseAndSetNames oOcc
Next oOcc
def.Document.Update
End Sub
Sub RenameExisting(oName As String, Optional eOccs As ComponentOccurrencesEnumerator = Nothing)
Dim existingOccWithName As ComponentOccurrence
Dim oOcc As ComponentOccurrence
If eOccs Is Nothing Then
For Each oOcc In existingOccs
If oOcc.name = oName Then
Set existingOccWithName = oOcc
Exit For
End If
Next oOcc
Else
For Each oOcc In eOccs
If oOcc.name = oName Then
Set existingOccWithName = oOcc
Exit For
End If
Next oOcc
End If
If Not existingOccWithName Is Nothing Then
existingOccWithName.name = oName & "_old"
End If
End Sub
Sub RenameOcc(oOcc As ComponentOccurrence)
oOcc.name = name & num
num = num + 1
End Sub
Sub TraverseAndSetNames(oOcc As ComponentOccurrence, Optional eOccs As ComponentOccurrencesEnumerator = Nothing)
RenameExisting name & num, eOccs
RenameOcc oOcc
If oOcc.DefinitionDocumentType = DocumentTypeEnum.kAssemblyDocumentObject Then
If oOcc.IsiAssemblyMember Then
Dim iAssyMember As iAssemblyMember
Set iAssyMember = oOcc.Definition.iAssemblyMember
Dim def As AssemblyComponentDefinition
Set def = iAssyMember.ReferencedDocumentDescriptor.ReferencedDocument.ComponentDefinition
Dim iOcc As ComponentOccurrence
For Each iOcc In def.Occurrences
TraverseAndSetNames iOcc, def.Occurrences.AllReferencedOccurrences(def)
Next iOcc
iAssyMember.ReferencedDocumentDescriptor.ReferencedDocument.Save2 True
Else
Dim sOcc As ComponentOccurrence
For Each sOcc In oOcc.SubOccurrences
TraverseAndSetNames sOcc
Next sOcc
End If
End If
End Sub
Jhoel Forshav
Download my free Inventor Addin - Hole Projector
LinkedIn | Ideas | Contributions | Blog posts | Website