| |  | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für SOLIDWORKS | | |  | FMB 2025, eine Veranstaltung am 04.11.2025
|
Autor
|
Thema: Bauteile umbenennen API (309 mal gelesen)
|
Gh0stTalk3r Mitglied

 Beiträge: 93 Registriert: 19.12.2014 SolidWorks 2023 SP 5.0; PDM Standard; MegaCAD 2021
|
erstellt am: 29. Apr. 2025 09:27 <-- editieren / zitieren --> Unities abgeben:         
Hallo, ich versuche hier per Makro die Bauteile einer Baugruppe umzubenennen und die Referenzen gleich zu aktualisieren. Es soll quasi die Funktion: "Rechtsklick im Featuremanager auf das Bauteil > Teil umbenennen" haben. Welche Methode wäre das? Ein paar habe ich schon versucht (z.B. RenameDocument). ------------------ gruß, Markus Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
KSAH Mitglied Freiberufler
 
 Beiträge: 188 Registriert: 18.06.2015 SolidWorks 2010 bis 2021
|
erstellt am: 29. Apr. 2025 10:09 <-- editieren / zitieren --> Unities abgeben:          Nur für Gh0stTalk3r
Servus, einfachste Lösung, Datei unter neuen Namen abspeichern und dann die alte Datei löschen. Davor aber abfragen, ob die Datei nicht schreibgeschützt ist. SW setzt dann die Reverenzen in allen offenen Teilen automatisch um. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
ad_man Mitglied freiberuflicher Entwicklungsing. (Fahrzeugtechnik, CSWP, CPPA))
   
 Beiträge: 1487 Registriert: 20.12.2003 SolidWorks 2024 SP5 mit Enterprise PDM , Windows 11, Dell Precision 3660, i7-12700K, 96 GB DDR-Ram, Quadro RTX A4000
|
erstellt am: 29. Apr. 2025 10:12 <-- editieren / zitieren --> Unities abgeben:          Nur für Gh0stTalk3r
|
Holger.S Mitglied Konstrukteur
  
 Beiträge: 535 Registriert: 01.10.2004 Solidworks Professional 2021 SP5.1 Solidworks PDM Lenovo Thinkpad Microsoft Windows10 Pro Intel(R) Core(TM) i9-10885H CPU @ 2.40GHz 32 GB RAM NVIDIA Quadro RTX 3000
|
erstellt am: 30. Apr. 2025 07:31 <-- editieren / zitieren --> Unities abgeben:          Nur für Gh0stTalk3r
Das Problem beim Umbenennen in der Baugruppe ist, du nimmst da eine eventuelle Zeichnung nicht mit. Wenn du, wie ich bei dir sehe, PDM zur Verfügung hast, kannst du doch einfach die Dateien im PDM umbenennen. Alles einchecken und dann im PDM - Explorer umbenennen. ------------------ "Wir ertrinken in Informationen, aber wir hungern nach Wissen..." John Naisbitt Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
KSAH Mitglied Freiberufler
 
 Beiträge: 188 Registriert: 18.06.2015 SolidWorks 2010 bis 2021
|
erstellt am: 30. Apr. 2025 09:39 <-- editieren / zitieren --> Unities abgeben:          Nur für Gh0stTalk3r
Mein Nummerngenerator funktioniert so: 1. Suchen der Zeichnung im Verzeichnis. Da sind String Operationen nötig. Endung wegschneiden, andere Endung ran und suchen. 2. Prüfen ob Zeichnung offen, wenn nein öffnen der Zeichnung. 3. Zeichnung unter neuen Namen speichern. 3. Modell unter neuen Namen speichern. 4. Zeichnung nochmal speichern wegen der Reverenzen 5. War die Zeichnung offen, dann nichts, ansonsten Zeichnung schließen. 6. Prüfen ob alte Zeichnung schreibgeschützt ist, wenn nein löschen 7. Prüfen ob altes Modell schreibgeschützt ist, wenn nein löschen. Warum ich die Zeichnung als erstes umbenenne, weiß ich nicht mehr. Das hatte einen Grund. Abgeguckt habe ich das in einer Firma mit PDM. Da kam ich erst auf die Idee die Zeichnung mitzunehmen.
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Gh0stTalk3r Mitglied

 Beiträge: 93 Registriert: 19.12.2014 SolidWorks 2023 SP 5.0; PDM Standard; MegaCAD 2021
|
erstellt am: 30. Apr. 2025 10:17 <-- editieren / zitieren --> Unities abgeben:         
|
Gh0stTalk3r Mitglied

 Beiträge: 93 Registriert: 19.12.2014 SolidWorks 2023 SP 5.0; PDM Standard; MegaCAD 2021
|
erstellt am: 06. Mai. 2025 16:41 <-- editieren / zitieren --> Unities abgeben:         
So ist übrigens der aktuelle Status. Funktioniert scheinbar Für mein erstes Mal bin ich ganz zufrieden.
Code: Option ExplicitDim swApp As SldWorks.SldWorks Dim swModel As SldWorks.ModelDoc2 Dim refSettings As Boolean Sub main() ' Ändert den Dateinamen von Bauteilen/Baugruppen/Zeichnungen nach bestimmten Properties ' Ausschluss von Dateien, welche nicht den Status Freigegeben haben ' Root-Baugruppe wird aktuell noch nicht umbenannt ' Root-Baugruppe muss offen sein Dim swConf As SldWorks.Configuration Dim swRootComp As SldWorks.Component2 Dim bRet As Boolean Dim swModelDocExt As SldWorks.ModelDocExtension Dim fileerror As Long Dim filewarning As Long Dim value As Boolean ' Aktuelle Datei holen Set swApp = Application.SldWorks Set swModel = swApp.ActiveDoc ' Liest und Setzt die Einstellung für Externe Referenzen: "Komponentennamen aktualisieren, wenn Dokumente ersetzt werden auf" true refSettings = swApp.GetUserPreferenceToggle(swExtRefUpdateCompNames) swApp.SetUserPreferenceToggle swExtRefUpdateCompNames, True ' Wenn kein Model geöffnet ist, nichts tun If swModel Is Nothing Then MsgBox "Kein Dokument geöffnet!", vbExclamation Exit Sub End If ' Root-Komponente des Assemblies als Ausgangspunkt festmachen Set swConf = swModel.GetActiveConfiguration Set swRootComp = swConf.GetRootComponent3(True) ' Durch alle Unterbaugruppen TraverseComponent swModelDocExt, swRootComp ' Root-Baugruppe neu aufbauen und mit allen Referenzen speichern swModel.ForceRebuild3 (False) value = swModel.Save3(swSaveAsOptions_SaveReferenced, fileerror, filewarning) ' setzt die Einstellung für Externe Referenzen wieder auf den ursprünglichen Wert swApp.SetUserPreferenceToggle swExtRefUpdateCompNames, refSettings Debug.Print "" Debug.Print "FERTIG" End Sub Sub TraverseComponent(swModelDocExt As SldWorks.ModelDocExtension, swComp As SldWorks.Component2) Dim bRet As Boolean Dim DrawingPath As String Dim DrawingPathNew As String Dim FileDir As String Dim FileNameNew As String Dim FilePath As String Dim FilePathNew As String Dim errorsRename As Long Dim i As Long Dim Prop_dokumentenstatus As String Dim Prop_drawingNumber As String Dim Prop_revision As String Dim resolvedValOut As String Dim swChildComp As SldWorks.Component2 Dim swChildModel As SldWorks.ModelDoc2 Dim swChildModelDocExt As SldWorks.ModelDocExtension Dim swSelData As SldWorks.SelectData Dim swSelMgr As SldWorks.SelectionMgr Dim valOut As String Dim vChildComp As Variant Dim swCustProp As CustomPropertyManager vChildComp = swComp.GetChildren For i = 0 To UBound(vChildComp) Set swChildComp = vChildComp(i) Set swChildModel = swChildComp.GetModelDoc2 If Not swChildModel Is Nothing Then Set swChildModelDocExt = swChildModel.Extension ' holt sich die benötigten benutzerdefinierten Eigenschaften Set swCustProp = swChildModelDocExt.CustomPropertyManager("") swCustProp.Get4 "Zeichnungsnummer", False, valOut, resolvedValOut Prop_drawingNumber = resolvedValOut swCustProp.Get4 "Dokumentenstatus", False, valOut, resolvedValOut Prop_dokumentenstatus = resolvedValOut swCustProp.Get4 "Revision", False, valOut, resolvedValOut Prop_revision = resolvedValOut ' Nur Freigegebene Dateien sollen geändert werden. If LCase(Trim(Prop_dokumentenstatus)) <> "freigegeben" Then ' Debug.Print "Nicht freigegeben, übersprungen: " & Prop_drawingNumber GoTo Weiter End If ' Virtuelle Teile überspringen If swChildComp.IsVirtual Then 'Debug.Print "Virtuelles Teil:" & swChildModel.GetPathName GoTo Weiter End If ' selectiert die entsprechende Komponente. Notwendig für das Umbenennen mit swModelDocExt.RenameDocument Set swSelMgr = swModel.SelectionManager Set swSelData = swSelMgr.CreateSelectData bRet = swChildComp.Select4(False, swSelData, False) ' Neuen Dateinamen zusammenbauen FilePath = swChildModel.GetPathName FileDir = Left(FilePath, InStrRev(FilePath, "\") - 1) DrawingPath = FileDir & "\" & Prop_drawingNumber & ".slddrw" Debug.Print FilePath FileNameNew = Prop_drawingNumber & "." & Prop_revision ' Debug.Print FileNameNew If swChildModel.GetType = swDocPART Then FilePathNew = FileDir & "\" & FileNameNew & ".sldprt" ElseIf swChildModel.GetType = swDocASSEMBLY Then FilePathNew = FileDir & "\" & FileNameNew & ".sldasm" End If ' Umbenennprozess für sldprt/sldasm und slddrw mit Umbiegen der Referenz in der Zeichnung Set swModelDocExt = swModel.Extension If Not Dir(FilePathNew) <> "" Then errorsRename = swModelDocExt.RenameDocument(FileNameNew) errorsRename = swApp.ReplaceReferencedDocument(DrawingPath, FilePath, FilePathNew) DrawingPathNew = FileDir & "\" & FileNameNew & ".SLDDRW" If Dir(DrawingPath) <> "" Then If Not Dir(DrawingPathNew) <> "" Then Name DrawingPath As DrawingPathNew End If End If End If ' Debug.Print swChildComp.Name2 & " - " & errorsRename ' Debug.Print End If Weiter: ' nächster Durchlauf TraverseComponent swModelDocExt, swChildComp Next i End Sub
vermutlich kommt aber gleich jemand und sagt: Gibts schon ------------------ gruß, Markus Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
 |