I putting together a macro that i can run on an assembly to automatically replace parts. Basically im replacing a specific named part with a identical part with a different name from a defined standards library location.
I can get the components & their configurations being used. However the "replace" is failing
my problem lies in: bRet = swAssy.ReplaceComponents2(FileName, CfgName, True, 0, True), need it to return true & im getting false
See Code Below:
Option Explicit
Sub TraverseComponent(swComp As SldWorks.Component2, nLevel As Long)
Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim swAssy As SldWorks.AssemblyDoc
Dim swSelMgr As SldWorks.SelectionMgr
Dim swSelComp As SldWorks.Component2
Dim swSelModel As SldWorks.ModelDoc2
Dim vChildComp As Variant
Dim swChildComp As SldWorks.Component2
Dim sPadStr As String
Dim i As Long
Dim CfgName As String
Dim FileName As String
Dim bRet As Boolean
Dim nErrors As Long
Set swApp = CreateObject("SldWorks.Application")
Set swModel = swApp.ActiveDoc
Set swAssy = swModel
Set swSelMgr = swModel.SelectionManager
For i = 0 To nLevel - 1
sPadStr = sPadStr + " "
Next i
vChildComp = swComp.GetChildren
For i = 0 To UBound(vChildComp)
Set swChildComp = vChildComp(i)
CfgName = swChildComp.ReferencedConfiguration
Debug.Print sPadStr & "Component name: " & swChildComp.Name2 & ", Component ID: " & swChildComp.GetID
Debug.Print sPadStr & "Component name: " & CfgName
'-----------------------------------Start Standard INCH Parts---------------------------------------
If swChildComp.Name2 Like "*INCH-9752*" Then
FileName = "D:\Inch\INCH-9752-15665.sldprt"
End If
If swChildComp.Name2 Like "*INCH-9566*" Then
FileName = "D:\Inch\INCH-9566-15756.sldprt"
End If
'-----------------------------------End Standard INCH Parts---------------------------------------
bRet = swAssy.ReplaceComponents2(FileName, CfgName, True, 0, True)
Debug.Print "Replacement component = " & swChildComp.Name2
Debug.Print "All instances of old component replaced? " & bRet
TraverseComponent swChildComp, nLevel + 1
Next i
End Sub
Sub main()
Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim swConfMgr As SldWorks.ConfigurationManager
Dim swConf As SldWorks.Configuration
Dim swRootComp As SldWorks.Component2
Dim swSelMgr As SldWorks.SelectionMgr
Set swApp = CreateObject("SldWorks.Application")
Set swModel = swApp.ActiveDoc
Set swConfMgr = swModel.ConfigurationManager
Set swConf = swConfMgr.ActiveConfiguration
Set swRootComp = swConf.GetRootComponent3(True)
'Debug.Print "File = " & swModel.GetPathName
If swModel.GetType = swDocumentTypes_e.swDocASSEMBLY Then
TraverseComponent swRootComp, 1
End If
End Sub