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
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.
Für das Makro gehe ich davon aus, dass die Aufnahmen am selben Ort wie der Raum und mit demselben Namen gespeichert werden?
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!
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.
Mehrere DRW-Dateien mit jeweils unterschiedlichen Namen.
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.
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.
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...)
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?
Um eine Zeile auszukommentieren, fügen Sie ein ' am Anfang der Zeile hinzu.
Also für Ihre ein ' vor dieser Zeile:
Vielen Dank
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.