How can I get Component list in the order of design tree?

hi,

I would like to write a macro for automated component numbering for assemblies.

Numbers are depends on the level of the component, the component is "part" or "asm", and what is the parent of the component. At the end of the process the numbers will stored in the components "PartNo" property.

My problem is how can I get the exactly same order like the design tree?

I found the code below on the internet.. (it works good, but the order of the elements is not the same on every run)

Option Explicit
Public Enum swComponentVisibilityState_e
    swComponentHidden = 0
    swComponentVisible = 1
End Enum

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
   
    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 & ">"
       
        If swComponentHidden = swChildComp.Visible Then
            swChildComp.Visible = swComponentVisible
        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

Thanks every help

SolidworksApi macros