Part cutlist macro

Good afternoon, 

I should create a macro that exports all the bodies that form the cutting list of a multibody part.
I have already created a collage of macros found online and it works, correctly exporting a single body for the identical ones, but I would need the new file to be called like this when saving: "file name_cutlist.step catname", where "cutlist folder name" is the name of the folders that contain the bodies of the separate cutting list.

can anyone help?

Below is the code I already have:

Const CUT_LIST_PRPS_TRANSFER As Long = swCutListTransferOptions_e.swCutListTransferOptions_FileProperties
Const OUT_DIR As String = ""

Dim swApp As SldWorks.SldWorks
Dim exportedBodies As Object  ' Track already exported body names

Sub main()
    Set swApp = Application.SldWorks
    Set exportedBodies = CreateObject("Scripting.Dictionary")
    
    Dim swPart As SldWorks.PartDoc
    Set swPart = swApp.ActiveDoc
    
    Dim vBodies As Variant
    vBodies = GetSelectedBodies(swPart.SelectionManager)
    
    If IsEmpty(vBodies) Then
        vBodies = swPart.GetBodies2(swBodyType_e.swSolidBody, True)
    End If
    
    Dim i As Integer
    Dim exportedCount As Integer: exportedCount = 0
    
    For i = 0 To UBound(vBodies)
        Dim swBody As SldWorks.Body2
        Set swBody = vBodies(i)
        
        Dim bodyName As String: bodyName = swBody.name
        
        ' Skip if already exported (identical body name)
        If Not exportedBodies.Exists(bodyName) Then
            exportedBodies.Add bodyName, True
            
            If False <> swBody.Select2(False, Nothing) Then
                Dim outFilePath As String
                outFilePath = GetOutFilePath(swPart, swBody, OUT_DIR)
                
                Dim errs As Long
                Dim warns As Long
                
                If False <> swPart.SaveToFile3(outFilePath, swSaveAsOptions_e.swSaveAsOptions_Silent, CUT_LIST_PRPS_TRANSFER, False, "", errs, warns) Then
                    swApp.CloseDoc outFilePath
                    exportedCount = exportedCount + 1
                Else
                    Err.Raise vbError, "", "Failed to save body " & bodyName & " to file " & outFilePath & ". Error code: " & errs
                End If
            Else
                Err.Raise vbError, "", "Failed to select body " & bodyName
            End If
        End If
    Next
    
    MsgBox exportedCount & " unique bodies exported successfully"
End Sub

Function GetSelectedBodies(selMgr As SldWorks.SelectionMgr) As Variant
    Dim isInit As Boolean
    isInit = False
    
    Dim swBodies() As SldWorks.Body2
    Dim i As Integer
    
    For i = 1 To selMgr.GetSelectedObjectCount2(-1)
        Dim swBody As SldWorks.Body2
        Set swBody = GetSelectedObjectBody(selMgr, i)
        
        If Not swBody Is Nothing Then
            If Not isInit Then
                ReDim swBodies(0)
                Set swBodies(0) = swBody
                isInit = True
            Else
                If Not Contains(swBodies, swBody) Then
                    ReDim Preserve swBodies(UBound(swBodies) + 1)
                    Set swBodies(UBound(swBodies)) = swBody
                End If
            End If
        End If
    Next

    If isInit Then
        GetSelectedBodies = swBodies
    Else
        GetSelectedBodies = Empty
    End If
End Function

Function GetSelectedObjectBody(selMgr As SldWorks.SelectionMgr, index As Integer) As SldWorks.Body2
    Dim swBody As SldWorks.Body2
    Dim selObj As Object
    Set selObj = selMgr.GetSelectedObject6(index, -1)
    
    If Not selObj Is Nothing Then
        If TypeOf selObj Is SldWorks.Body2 Then
            Set swBody = selObj
        ElseIf TypeOf selObj Is SldWorks.Face2 Then
            Dim swFace As SldWorks.Face2
            Set swFace = selObj
            Set swBody = swFace.GetBody
        ElseIf TypeOf selObj Is SldWorks.Edge Then
            Dim swEdge As SldWorks.Edge
            Set swEdge = selObj
            Set swBody = swEdge.GetBody
        ElseIf TypeOf selObj Is SldWorks.Vertex Then
            Dim swVertex As SldWorks.Vertex
            Set swVertex = selObj
            Set swBody = swVertex.GetBody
        End If
    End If

    Set GetSelectedObjectBody = swBody
End Function

Function Contains(vArr As Variant, item As Object) As Boolean
    Dim i As Integer
    For i = 0 To UBound(vArr)
        If vArr(i) Is item Then
            Contains = True
            Exit Function
        End If
    Next
    Contains = False
End Function

Function GetOutFilePath(model As SldWorks.ModelDoc2, body As SldWorks.Body2, outDir As String) As String
    If outDir = "" Then
        outDir = model.GetPathName()
        If outDir = "" Then
            Err.Raise vbError, "", "Output directory cannot be composed as file was never saved"
        End If
        outDir = Left(outDir, InStrRev(outDir, "\\") - 1)
    End If
    
    If Right(outDir, 1) = "\\" Then
        outDir = Left(outDir, Len(outDir) - 1)
    End If
    '
    '
    Dim filename As String
    Dim nuovofile As String
    Dim vecchiofile As String
    
    
    filename = model.GetPathName()
    filename = Right(filename, 18)
    If Left(filename, 1) = "C" Then
    nuovofile = Left(filename, 11)
    Else
    vecchiofile = Right(filename, 17)
    vecchiofile = Left(vecchiofile, 10)
    End If
    
    'swFeat.name
    
        
    GetOutFilePath = ReplaceInvalidPathSymbols(outDir & "\\" & body.name & ".step")
End Function

Function ReplaceInvalidPathSymbols(path As String) As String
    Const REPLACE_SYMB As String = "_"
    
    Dim res As String
    res = Right(path, Len(path) - Len("X:\\"))
    
    Dim drive As String
    drive = Left(path, Len("X:\\"))
    
    Dim invalidSymbols As Variant
    invalidSymbols = Array("/", ":", "*", "?", """", "<", ">", "|")
    
    Dim i As Integer
    For i = 0 To UBound(invalidSymbols)
        Dim invalidSymb As String
        invalidSymb = CStr(invalidSymbols(i))
        res = Replace(res, invalidSymb, REPLACE_SYMB)
    Next
    
    ReplaceInvalidPathSymbols = drive + res
End Function