7 Replies Latest reply on Feb 18, 2016 2:15 AM by 幸 柴 田

    How can I overwrite read only documents

    幸 柴 田

      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