Speichern des Querschnittsbestandteils in einem Ordner mit seinem Namen

Hallo Kolleginnen und Kollegen,

Ich konnte im Forum nichts finden; Ich frage mich, ob jemand ein Makro hätte, das die Unterbaugruppen in einem Ordner speichert, der den Namen der Unterbaugruppe annimmt. Tatsächlich habe ich von einem Kunden eine Kläranlage erhalten, und sie hat gut dreißig unter Montage und wenn ich sie speichere, habe ich alles in einem Chaos im Hauptordner, während ich mir eine Funktion gewünscht hätte, um die Unterordner jeder Unterbaugruppe zu erstellen, um die Teile zu speichern.

Vielen Dank im Voraus für Ihre Hilfe

2 „Gefällt mir“

Guten Abend ac cobra 427

Das angehängte Makro führt die Aufgabe an einem Beispiel für eine Baugruppe mit etwa vierzig Teilen und 8 Unterbaugruppen auf zwei Ebenen aus.
Die Struktur des Datensatzes ist quasi eine Kopie des SolidWorks Baums: Jede Baugruppe wird in einem Ordner gespeichert, in dem ihr Name zusammen mit den darin enthaltenen Teilen rekursiv angegeben ist.
Dieser Datensatz gilt auch für die Stammassembly, die eine Kopie davon erstellt.

Um mit Vorsicht getestet zu werden, gibt es keine Sicherheitsvorkehrungen...

Herzliche Grüße.


saveastree.swp
2 „Gefällt mir“

Hallo @m.blt ,

Das Makro funktioniert so, wie es sollte, aber wäre es möglich, dass es funktioniert, bevor die Baugruppe ein 1. Mal gespeichert wird? 

Vielen Dank für die Zeit, die Sie investiert haben, denn ich habe eine echte Quiche in diesem Bereich! 

Im Anhang befindet sich der geänderte Code, ich bin mir nicht sicher, ob er der sauberste ist, aber er scheint funktionsfähig zu sein.

Wenn der Pfad leer ist, wird ein Verzeichnis erstellt, das in der 3. Zeile definiert ist (harter Pfad kann bei Bedarf geändert werden) Hier "C:\Temp\AS_STEP\"

Alle Ihre Schrittdateien werden daher in diesen Ordner kopiert und können durch Schließen der Baugruppe verschoben werden. (Kopieren und Einfügen aus Ordner)

Es gibt eine Möglichkeit, Sie dazu zu bringen, den Zielpfad zu wählen, aber ich weiß nicht mehr, wie, also ist hier die Lösung, die als Ersatz gewählt wird.

Option Explicit
'On définit la constant pour le chemin si assemblage non eregistré
Public Const CheminConstante As String = "C:\Temp\AS_STEP\"


Sub TraitementAssemblage(swComp As SldWorks.Component2, ByVal Emplacement As String, ByVal nomfichier As String)

    Dim vChildComp              As Variant
    Dim swModelComponent        As SldWorks.ModelDoc2
    Dim swChildComp             As SldWorks.Component2
    Dim swCompConfig            As SldWorks.Configuration
    Dim nChild                  As Long
    Dim longStatus              As Boolean
    Dim dossier                 As String
    
    dossier = Emplacement & Left(nomfichier, Len(nomfichier) - 7) & "\"     ' Nom de dossier: celui de l'assemblage
    If Dir(dossier, vbDirectory) = "" Then
        MkDir dossier                                                       ' Création du dossier de l'assemblage
        Set swModelComponent = swComp.GetModelDoc2
        longStatus = swModelComponent.SaveAs3(dossier & nomfichier, 0, 0)   ' Enregistrement de l'assemblage dans son dossier
    Else
        Exit Sub
    End If
    
    vChildComp = swComp.GetChildren                         ' Liste des enfants de l'assemblage
    For nChild = 0 To UBound(vChildComp)
        Set swChildComp = vChildComp(nChild)
        nomfichier = Dir$(swChildComp.GetPathName)
        
        If UCase(Right(nomfichier, 6)) = "SLDASM" Then      ' Si c'est un assemblage: traitement récursif
            TraitementAssemblage swChildComp, dossier, nomfichier
            
        ElseIf UCase(Right(nomfichier, 6)) = "SLDPRT" Then  ' si c'est une pièce : enregistrement
            Set swModelComponent = swChildComp.GetModelDoc2
            longStatus = swModelComponent.SaveAs3(dossier & nomfichier, 0, 0)
        End If
        
    Next nChild
End Sub
 
 

Sub main()
            Dim swApp           As SldWorks.SldWorks
            Dim swModel         As SldWorks.ModelDoc2
            Dim swConf          As SldWorks.Configuration
            Dim swRootComp      As SldWorks.Component2
            Dim Emplacement     As String
            Dim nomfichier      As String

    Set swApp = Application.SldWorks
    Set swModel = swApp.ActiveDoc
    Emplacement = swModel.GetPathName
    'On vérifie l'extension
    Dim FileTyp As Long
    FileTyp = swModel.GetType
    If Not FileTyp = swDocASSEMBLY Then
        MsgBox ("Le document doit être un assemblage...")
        Exit Sub
    End If
    If Emplacement = "" Then
        If Not Len(Dir(CheminConstante, vbDirectory)) > 0 Then
            MkDir CheminConstante
            Emplacement = CheminConstante
            Debug.Print swModel.GetTitle
            nomfichier = swModel.GetTitle & ".sldasm"

        Else
        nomfichier = swModel.GetTitle & ".sldasm"
        Emplacement = CheminConstante
        End If
    Else
        nomfichier = Dir$(Emplacement)                                  ' Nom du document d'assemblage principal
    End If

    Debug.Print Emplacement
    

    
    'If Right(Emplacement, 1) = "\" Then Emplacement = Left(Emplacement, Len(Emplacement) - 1)
    'Emplacement = Left(Emplacement, InStrRev(Emplacement, "\"))     ' Nom du dossier d'origine
    
    Set swConf = swModel.GetActiveConfiguration
    Set swRootComp = swConf.GetRootComponent3(False)
    TraitementAssemblage swRootComp, Emplacement, nomfichier        ' Comme c'est un assemblage: traitement
    swModel.Extension.SaveAs Emplacement & nomfichier, swSaveAsVersion_e.swSaveAsCurrentVersion, swSaveAsOptions_e.swSaveAsOptions_Silent, Nothing, 0, 0

End Sub


Seien Sie vorsichtig, dieses Makro funktioniert nicht, wenn Sie 3Dinterconnect importieren, es sei denn, Sie unterbrechen die Verknüpfung.

1 „Gefällt mir“

Hallo

Ich habe das Makro @m.blt bevorzugt, weil es den Ordner mit den Unterordnern im Quellordner erstellt und ich nur die Baugruppe und die zuvor gespeicherten Teile löschen muss. Das Makro @sbadenis speichert die Teile und asm im Quellordner und erstellt einen Ordner in Time mit den Unterbaugruppen-Unterordnern, sodass ich das asm und die Teile wie bei dem von @m.blt löschen muss, aber ich muss zusätzlich ein Ausschneiden und Einfügen durchführen, um alles wieder in den richtigen Ordner zu legen. 

PS dsl für die Verzögerung bei der Validierung der besten Antwort (viel Arbeit) und danke Ihnen beiden, dass Sie sich die Zeit genommen haben.

1 „Gefällt mir“