AnsweredAssumed Answered

How can I overwrite read only documents

Question asked by Kouji Shibata on Jan 18, 2016
Latest reply on Feb 18, 2016 by Kouji Shibata

Hi Everyone ,


I want to save all child assembly document.

But I can't overwrite them because they are read only state.


I made a code below

But this code returns error on  "bStatus = swCompModel.SetReadOnlyState(False)"

Please help me.


Thank you in advance.


Option Explicit


Sub TraverseComponent(swComp As SldWorks.Component2, nLevel As Long)

    Dim vChildCompArr             As Variant

    Dim vChildComp                 As Variant

    Dim swChildComp               As SldWorks.Component2

    Dim swCompConfig            As SldWorks.Configuration

    Dim sPadStr                       As String

    Dim i                                   As Long

    Dim sExt                             As String

    Dim nRetval                       As Long

    Dim swCompModel            As SldWorks.ModelDoc2

    Dim swApp                        As SldWorks.SldWorks

    Dim bStatus                    As Boolean

    Dim lErrors                     As Long

    Dim lWarnings                   As Long


    Set swApp = Application.SldWorks


    For i = 0 To nLevel - 1

        sPadStr = sPadStr + "  "

    Next i


    vChildCompArr = swComp.GetChildren


    For Each vChildComp In vChildCompArr


        Set swChildComp = vChildComp

                Debug.Print sPadStr & swChildComp.Name2 & " <" & swChildComp.ReferencedConfiguration & ">"

                sExt = UCase(Right(swChildComp.GetPathName, 6))


                If sExt = "SLDASM" Then

                    Set swCompModel = swApp.ActivateDoc2(swChildComp.GetPathName, False, nRetval)

                     bStatus = swCompModel.SetReadOnlyState(False)

                     bStatus = swCompModel.Save3(swSaveAsOptions_Silent, lErrors, lWarnings)

                     swApp.CloseDoc (swChildComp.GetPathName)


               End If


        TraverseComponent swChildComp, nLevel + 1


End Sub


Sub main()


    Dim swApp                       As SldWorks.SldWorks

    Dim swModel                     As SldWorks.ModelDoc2

    Dim swAssy                      As SldWorks.AssemblyDoc

    Dim swConf                      As SldWorks.Configuration

    Dim swRootComp              As SldWorks.Component2

    Dim bRet                        As Boolean


    Set swApp = Application.SldWorks

    Set swModel = swApp.ActiveDoc

    Set swConf = swModel.GetActiveConfiguration

    Set swRootComp = swConf.GetRootComponent


     Debug.Print "File = " & swModel.GetPathName


     TraverseComponent swRootComp, 1



End Sub