3 Replies Latest reply on Aug 28, 2015 4:55 AM by Willie Roelofs

    Save New Version

    Willie Roelofs



      I'm writing a macro for saving new versions of my solidworks files. What I want is to make a "snapshot" of the motherassembly and saves it with a new version number.

      - The macro creates a new folder (named after the version number)

      - The macro creates a subfolder (always named the same)

      - The macro does a pack and go, targeting that subfolder;

      - The macro renames every part, assembly, subparts and subassemblies;

           * No toolbox components or parts from third parties.

      - The macro does a forced update and saves the assembly


      In the future I want to use the macro to:

      - check if there are files that have a different version number, but are exactly the same.

           If two or more are the same, the file with the oldest number will be referenced to the assembly. The rest will be deleted.


      The problems

      Subassemblies: Some of the vba codes can only target assembly's children, they can't target subassembly's children. I want to write the macro that it can target every single file.

      Pack and go: I don't know how to exclude files from the Pack and Go feature.

      Pack and go: I'm uncertain that Pack and Go is the way to go. I'm thinking a "Save As" might be easier to write?



      (Drive):\Projecten\ (Projectname) \ (Versionnumber) \ 04 - SOLIDWORKS\       

      Projectname is an abbreviation of the Project, usually containing 2 to 4 letters.

      Versionnumber is the versioncontrol, containing 3 numbers.


      The code:

      Currently I have only code to rename children in an assembly:


      Public Enum swUserPreferenceToggle_e
          swExtRefUpdateCompNames = 18
      End Enum
      Sub main()
          Dim swApp                   As SldWorks.SldWorks
          Dim swModel                 As SldWorks.ModelDoc2
          Dim swConfigMgr             As SldWorks.ConfigurationManager
          Dim swConfig                As SldWorks.Configuration
          Dim swRootComp              As SldWorks.Component2
          Dim Children                As Variant
          Dim swChild                 As SldWorks.Component2
          Dim ChildCount              As Integer
          Dim OldName                 As String
          Dim NewName                 As String
          Dim bOldSetting             As Boolean
          Dim bRet                    As Boolean
          Dim i                       As Long
          Set swApp = Application.SldWorks
          Set swModel = swApp.ActiveDoc
          Set swConfigMgr = swModel.ConfigurationManager
          Set swConfig = swConfigMgr.ActiveConfiguration
          Set swRootComp = swConfig.GetRootComponent
          bOldSetting = swApp.GetUserPreferenceToggle(swExtRefUpdateCompNames)
          swApp.SetUserPreferenceToggle swExtRefUpdateCompNames, False
          Children = swRootComp.GetChildren
          ChildCount = UBound(Children)
          j = 0
          Debug.Print swModel.GetTitle
              j = j + 1
                  If Not InStr(Left(swModel.GetTitle, j), "-") = 0 Then
                  SearchStr = Left(swModel.GetTitle, j)
                  Bla = "Ja"
              End If
          Loop Until Bla = "Ja"
          'Versienummer toekenning
                  versie = InputBox("Welke versienummer wilt u toekennen?" & vbCrLf & "Versienummers bestaan uit 3 getallen", "VERSIENUMMER", Mid(swModel.GetTitle, j + 1, 3))
              Loop Until Len(versie) = 3
          Loop Until IsNumeric(versie) = True
          For i = 0 To ChildCount
              Set swChild = Children(i)
              ' Changing component name requires component to be selected
              bRet = swChild.Select2(False, 0)
              Debug.Print swChild.Name2
              If Left(swChild.Name2, j) = SearchStr Then
                  OldName = swChild.Name2
                  NewName = Left(SearchStr & versie & Right(OldName, Len(OldName) - Len(SearchStr) - 3), Len(versie) + 11)
                  swChild.Name2 = NewName
              End If
          Next i
          swApp.SetUserPreferenceToggle swExtRefUpdateCompNames, bOldSetting
      End Sub