Select component in feature tree using its name via SOLIDWORKS API
This example demonstrates the most performance efficient way to select a component on any level of the assembly by its full name using SOLIDWORKS API.
Name of the component is defined as a path where each level is separated by / symbol. Component instance id is specified with a - symbol (e.g. FirstLevelComp-1/SecondLevelComp-2/TargetComp-1)
Component name can be found in the following dialog:
Refer Get Component By Name example for macro to retrieve the pointer to the component without the selection.
Dim swApp As SldWorks.SldWorks Sub main() Set swApp = Application.SldWorks Dim swAssy As SldWorks.AssemblyDoc Set swAssy = swApp.ActiveDoc Debug.Print SelectComponentByName(swAssy, "E-1/F^E-1/I-1") End Sub Function SelectComponentByName(assy As SldWorks.AssemblyDoc, name As String) As Boolean Dim rootName As String rootName = assy.GetTitle() Dim extPos As Long extPos = InStr(rootName, ".") If extPos <> -1 Then rootName = Left(rootName, extPos - 1) End If Dim selByIdStr As String selByIdStr = ConvertToSelectByIDString(rootName, name) SelectComponentByName = assy.Extension.SelectByID2(selByIdStr, "COMPONENT", 0, 0, 0, False, -1, Nothing, swSelectOption_e.swSelectOptionDefault) End Function Function ConvertToSelectByIDString(rootName As String, name As String) As String Dim vNameParts As Variant vNameParts = Split(name, "/") Dim prevParentName As String prevParentName = rootName Dim selByIdStr As String Dim i As Integer For i = 0 To UBound(vNameParts) Dim curPartName As String curPartName = vNameParts(i) If selByIdStr <> "" Then selByIdStr = selByIdStr & "/" End If selByIdStr = selByIdStr & curPartName & "@" & prevParentName prevParentName = Left(curPartName, InStrRev(curPartName, "-") - 1) Next ConvertToSelectByIDString = selByIdStr End Function