3D/MEP - Makrorekonstruktion & Aufzeichnung

Hallo

Ich bin auf der Suche nach einem SolidWorks Makro, das es ermöglicht, aus einem geöffneten Teil die zugehörigen Pläne zu rekonstruieren und zu speichern, ohne sie einzeln zu öffnen.

Hallo guillaume_pagnier,

Um das zu tun, was Sie verlangen, müssen Sie " BachtConverter " übergeben.

Dies ermöglicht es dir, dies und viele andere Dinge auch zu tun, aber du musst MyCADTools abonniert haben.
Viel Glück.
@+.
AR.

1 „Gefällt mir“

Für das Makro gehe ich davon aus, dass die Aufnahmen am selben Ort wie der Raum und mit demselben Namen gespeichert werden?

1 „Gefällt mir“

Ansonsten ist hier der funktionale Code, der dank Chat GPT erhalten wurde und für sehr einfache Codes recht gut funktioniert:

Option Explicit

Sub main()

    Dim swApp As SldWorks.SldWorks
    Dim swModel As SldWorks.ModelDoc2
    Dim partPath As String
    Dim drawingPath As String
    Dim swDrawing As SldWorks.ModelDoc2
    Dim errors As Long, warnings As Long

    Set swApp = Application.SldWorks
    Set swModel = swApp.ActiveDoc

    If swModel Is Nothing Then
        MsgBox "Aucun document ouvert."
        Exit Sub
    End If

    If swModel.GetType <> swDocPART Then
        MsgBox "Le document actif n'est pas une pièce."
        Exit Sub
    End If

    ' Obtenir le chemin complet de la pièce
    partPath = swModel.GetPathName

    If partPath = "" Then
        MsgBox "La pièce doit être enregistrée pour localiser la mise en plan."
        Exit Sub
    End If

    ' Remplacer l'extension .SLDPRT par .SLDDRW
    drawingPath = Left(partPath, InStrRev(partPath, ".")) & "SLDDRW"

    ' Vérifier si le fichier de mise en plan existe
    If Dir(drawingPath) = "" Then
        MsgBox "Le fichier de mise en plan n'existe pas : " & drawingPath
        Exit Sub
    End If

    ' Ouvrir la mise en plan
    Set swDrawing = swApp.OpenDoc6(drawingPath, swDocDRAWING, swOpenDocOptions_Silent, "", errors, warnings)

    If swDrawing Is Nothing Then
        MsgBox "Erreur lors de l'ouverture de la mise en plan."
        Exit Sub
    End If

    ' Activer le document de mise en plan
    swApp.ActivateDoc3 swDrawing.GetTitle, False, swRebuildOnActivation_e.swRebuildActiveDoc, errors

    ' Reconstruire
    swDrawing.ForceRebuild3 False

    ' Enregistrer
    swDrawing.Save3 swSaveAsOptions_Silent, errors, warnings

    MsgBox "Mise en plan reconstruite et enregistrée avec succès.", vbInformation

End Sub

Die Aufforderung für Interessierte:
Makro-VBA aus einem Teil, öffnen Sie die Zeichnung, erstellen Sie sie neu, und speichern Sie sie

Und sehr oft, wenn die Situation gut ist, müssen Sie in der Lage sein, die verschiedenen Fehler der Katze zu korrigieren!

2 „Gefällt mir“

Hallo

Funktioniert dieses Makro auch, wenn mehrere Clips mit demselben Raum verknüpft sind?

Mehrere Aufnahmen sind mehrere Blätter oder mehrere verschiedene Dateien mit unterschiedlichen Namen des Raumes, da sie nichts miteinander zu tun haben.
Sie müssen in der Anfrage sehr spezifisch sein.
Ein Beispiel oder Screenshot vermeidet oft Missverständnisse.

1 „Gefällt mir“

Mehrere DRW-Dateien mit jeweils unterschiedlichen Namen.

image

Nur wenn Sie die PRT_33376 Datei haben, besteht das Ziel darin, alle " CAO_xxxxx " Zeichnungen zu rekonstruieren und zu speichern, die alle mit dem PRT_33376 in Verbindung stehen.

Hier wird es sehr kompliziert, die Zeichnungen zu finden, die sich auf das Teil beziehen, in der Regel hat eine Zeichnung den gleichen Namen wie das Teil (und die Blätter können möglicherweise mehrere Zeichnungen zulassen).
Die Art und Weise, wie dies geschieht, ist alles andere als ideal.

1 „Gefällt mir“

Die Dateien werden von einem PLM verwaltet, so dass ihre Namen vom PLM definiert werden und die Tatsache, dass sie mehrere Pläne haben, damit zusammenhängt, dass sie nicht die gleichen Verteilungsrechte voneinander haben.

1 „Gefällt mir“

Dieser Code sollte funktionieren:

Option Explicit

Sub main()

    Dim swApp           As SldWorks.SldWorks
    Dim swModel         As SldWorks.ModelDoc2
    Dim swDrawDoc       As SldWorks.ModelDoc2
    Dim fileName        As String
    Dim pathNoExt       As String
    Dim drawingPath     As String
    Dim fso             As Object
    Dim folderPath      As String
    Dim file            As Object
    Dim folder          As Object
    Dim found           As Boolean
    Dim refs            As Variant
    Dim i               As Integer
    
    Set swApp = Application.SldWorks
    Set swModel = swApp.ActiveDoc
    
    If swModel Is Nothing Then
        MsgBox "Aucun document actif.", vbExclamation
        Exit Sub
    End If
    
    If swModel.GetType <> swDocPART Then
        MsgBox "Le document actif n'est pas une pièce (.SLDPRT).", vbExclamation
        Exit Sub
    End If

    ' Obtenir le chemin complet de la pièce
    fileName = swModel.GetPathName
    If fileName = "" Then
        MsgBox "La pièce n'est pas enregistrée. Enregistrez-la avant de lancer la macro.", vbExclamation
        Exit Sub
    End If
    
    ' Chemin sans extension
    pathNoExt = Left(fileName, InStrRev(fileName, ".") - 1)
    drawingPath = pathNoExt & ".slddrw" ' ? correction ici

    Set fso = CreateObject("Scripting.FileSystemObject")
    found = False


        ' Cherche dans le même dossier tous les dessins .slddrw
        folderPath = Left(fileName, InStrRev(fileName, "\") - 1)
        Set folder = fso.GetFolder(folderPath)
        
        For Each file In folder.Files
        Debug.Print file
            If LCase(fso.GetExtensionName(file.Name)) = "slddrw" Then ' ? bonne extension
                Set swDrawDoc = swApp.OpenDoc6(file.Path, swDocDRAWING, swOpenDocOptions_Silent, "", 0, 0)
                
                If Not swDrawDoc Is Nothing Then
                    refs = swDrawDoc.GetDependencies(False, False)
                    For i = 0 To UBound(refs)
                        If LCase(refs(i)) = LCase(fileName) Then
                            ' Dessin lié à la pièce active trouvé
                            swDrawDoc.ForceRebuild3 False
                            swDrawDoc.Save
                            swApp.CloseDoc swDrawDoc.GetTitle
                            found = True
                            Exit For
                        End If
                    Next i
                    
                    ' Si pas lié, fermer sans enregistrer
                    If Not found Then
                        swApp.CloseDoc swDrawDoc.GetTitle
                    End If
                End If
            End If
        Next

    If Not found Then
        MsgBox "Aucun fichier mise en plan lié trouvé.", vbInformation
    Else
        MsgBox "Traitement des mises en plan terminé.", vbInformation
    End If

End Sub

Seien Sie vorsichtig, obwohl es nicht ideal ist, da es das Verzeichnis durchsucht, in dem das Teil gespeichert ist, und für jede slddrw-Datei prüft, ob die verknüpfte Referenz dem geöffneten Teil entspricht.
Abhängig von der Anzahl der Dateien im Verzeichnis kann es also sehr schnell zeitaufwendig werden.
Es gibt sicherlich einen Weg über das PDM, aber da ich ihn nicht habe, ist es mir unmöglich, etwas anderes vorzuschlagen.

Es liegt an Ihnen, es zu testen und zu sehen, ob es zu Ihnen passt.

Und daher ist es notwendig, von Anfang an festzulegen, wie man arbeitet (pdm, die Benennung von MEP...)

3 „Gefällt mir“

Es ist perfekt, die Funktionalität passt zu mir, vielen Dank für Ihre Zeit, ist es möglich, die Zeichnungen nicht zu schließen und sie offen zu lassen, sobald sie neu erstellt und gespeichert wurden, um sie direkt im PLM zu speichern?

1 „Gefällt mir“

Um eine Zeile auszukommentieren, fügen Sie ein ' am Anfang der Zeile hinzu.
Also für Ihre ein ' vor dieser Zeile:
image

2 „Gefällt mir“

Vielen Dank :ok_hand:

1 „Gefällt mir“

Hallo

Wenn es sich bei dem PLM um Solidworks PDM handelt, ist es am einfachsten, Excel zu verwenden, um die Verknüpfungen vom PRT zu den verschiedenen DRWs abzurufen und deren Öffnung von Excel aus zu steuern.

1 „Gefällt mir“