Replace components preserving selection using SOLIDWORKS API
More 'Goodies'
This macro allows to replace the selected components in the tree with the components from the nominated folder (optionally with additional suffix in name) using SOLIDWORKS API.
This could be useful when managing similar types of projects where some files were copied, updated and renamed and need to be replaced in the original assembly.
This macro is using the API only selections which allows to keep the original selected components and avoiding the need to use the temp collection variables to satisfy the requirement of IAssemblyDoc::ReplaceComponents2 SOLIDWORKS API method where each component needs to be selected for replacement.
- Modify the input parameters. Set the directory where the replacement parts are located via REPLACEMENT_DIR and optional SUFFIX for file name.
Const REPLACEMENT_DIR As String = "D:\Assembly\Replacement" Const SUFFIX As String = "_new"
- Select components
- Run macro. All components are replaced
Const REPLACEMENT_DIR As String = "D:\Assembly\Replacement" Const SUFFIX As String = "_new" Dim swApp As SldWorks.SldWorks Sub main() Set swApp = Application.SldWorks Dim swModel As SldWorks.ModelDoc2 Set swModel = swApp.ActiveDoc If Not swModel Is Nothing Then Dim swAssy As SldWorks.AssemblyDoc Set swAssy = swModel Dim swSelMgr As SldWorks.SelectionMgr Set swSelMgr = swModel.SelectionManager Dim i As Integer For i = 1 To swSelMgr.GetSelectedObjectCount2(-1) If swSelMgr.GetSelectedObjectType3(i, -1) = swSelectType_e.swSelCOMPONENTS Then Dim swComp As SldWorks.Component2 Set swComp = swSelMgr.GetSelectedObject6(i, -1) Debug.Print swSelMgr.SuspendSelectionList swSelMgr.AddSelectionListObject swComp, Nothing swAssy.ReplaceComponents2 GetReplacementPath(swComp), swComp.ReferencedConfiguration, False, swReplaceComponentsConfiguration_e.swReplaceComponentsConfiguration_MatchName, True swSelMgr.ResumeSelectionList End If Next Else MsgBox ("Please open assembly document") End If End Sub Function GetReplacementPath(comp As SldWorks.Component2) Dim replFilePath As String Dim compPath As String compPath = comp.GetPathName() Dim dir As String dir = REPLACEMENT_DIR If Right(dir, 1) <> "\" Then dir = dir & "\" End If Dim fileName As String fileName = Right(compPath, Len(compPath) - InStrRev(compPath, "\")) If SUFFIX <> "" Then Dim ext As String ext = Right(fileName, Len(".SLDXXX")) fileName = Left(fileName, Len(fileName) - Len(ext)) & SUFFIX & ext End If replFilePath = dir & fileName GetReplacementPath = replFilePath End Function