12 Replies Latest reply on May 18, 2016 1:38 PM by Taylor Rassi

    Design Tree Sort

    Hrituc Alexandru

      Hi,

      I want to sort component from design tree, and if found a folder to ignore it...

      From example i have this:

      1.jpg

      After i run the macro, obtain this:

      2.jpg 3.jpg

      Why all components are inserted in folder????? inside the folder are sorted correctly, but useless...

      How can write so if find a folder to ignore it????...and obtain this:

      4.jpg

      THANKS

       

      this is the code i use:

      ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

      Option Explicit

       

       

      Dim swApp As SldWorks.SldWorks

      Dim Part As ModelDoc2

      Dim swAssyDoc As AssemblyDoc

      Dim selMgr As SelectionMgr

      Dim boolstatus As Boolean

      Dim longstatus As Long, longwarnings As Long

      Dim source As Object

      Dim target As Object

      Dim components As Variant

      Dim swComp As Component2

      Dim nComponents As Integer

      Dim sArray() As String

      Dim iArray() As Integer

      Dim i As Integer

      Dim x As Integer

      Dim y As Integer

      Dim sTemp As String

      Dim iTemp As Integer

       

       

      Sub main()

       

       

      Set swApp = Application.SldWorks

       

       

      Set Part = swApp.ActiveDoc

      Set swAssyDoc = Part

      Set selMgr = Part.SelectionManager

       

       

      ' Get all the top level components

      components = swAssyDoc.GetComponents(True)

       

       

      ' Get the upper bound of  array of components

      nComponents = UBound(components)

      ReDim sArray(nComponents)

      ReDim iArray(nComponents)

       

       

      ' Add component name and index to arrays

      For i = 0 To nComponents

          Set swComp = components(i)

          sArray(i) = swComp.Name2

          iArray(i) = i

      Next i

       

       

      ' Do a bubble sort on the arrays

      For x = 0 To (nComponents - 1)

          For y = (x + 1) To nComponents

              If sArray(x) > sArray(y) Then

                  sTemp = sArray(x)

                  iTemp = iArray(x)

                  sArray(x) = sArray(y)

                  iArray(x) = iArray(y)

                  sArray(y) = sTemp

                  iArray(y) = iTemp

              End If

          Next y

      Next x

       

       

      ' Reorder the components in reverse order

      For i = (nComponents - 1) To 0 Step -1

          boolstatus = swAssyDoc.ReorderComponents(components(iArray(i)), components(iArray(i + 1)), swReorderComponents_Before)

      Next i

       

       

      End Sub

      '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''