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)

                     Else

                     End If

             

              TraverseComponent swChildComp, nLevel + 1

          Next

      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