ds-blue-logo
Preview  |  SOLIDWORKS USER FORUM
Use your SOLIDWORKS ID or 3DEXPERIENCE ID to log in.
CACad Admin24/05/2017

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