Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de
  SolidWorks
  Bauteile umbenennen API

Antwort erstellen  Neues Thema erstellen
CAD.de Login | Logout | Profil | Profil bearbeiten | Registrieren | Voreinstellungen | Hilfe | Suchen

Anzeige:

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen nächster neuer Beitrag | nächster älterer Beitrag
  
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



Sehen Sie sich das Profil von Gh0stTalk3r an!   Senden Sie eine Private Message an Gh0stTalk3r  Schreiben Sie einen Gästebucheintrag für Gh0stTalk3r

Beiträge: 93
Registriert: 19.12.2014

SolidWorks 2023 SP 5.0; PDM Standard; MegaCAD 2021

erstellt am: 29. Apr. 2025 09:27    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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


Sehen Sie sich das Profil von KSAH an!   Senden Sie eine Private Message an KSAH  Schreiben Sie einen Gästebucheintrag für KSAH

Beiträge: 188
Registriert: 18.06.2015

SolidWorks 2010 bis 2021

erstellt am: 29. Apr. 2025 10:09    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Gh0stTalk3r 10 Unities + Antwort hilfreich

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))


Sehen Sie sich das Profil von ad_man an!   Senden Sie eine Private Message an ad_man  Schreiben Sie einen Gästebucheintrag für ad_man

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Gh0stTalk3r 10 Unities + Antwort hilfreich

Holger.S
Mitglied
Konstrukteur


Sehen Sie sich das Profil von Holger.S an!   Senden Sie eine Private Message an Holger.S  Schreiben Sie einen Gästebucheintrag für Holger.S

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Gh0stTalk3r 10 Unities + Antwort hilfreich

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


Sehen Sie sich das Profil von KSAH an!   Senden Sie eine Private Message an KSAH  Schreiben Sie einen Gästebucheintrag für KSAH

Beiträge: 188
Registriert: 18.06.2015

SolidWorks 2010 bis 2021

erstellt am: 30. Apr. 2025 09:39    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Gh0stTalk3r 10 Unities + Antwort hilfreich

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



Sehen Sie sich das Profil von Gh0stTalk3r an!   Senden Sie eine Private Message an Gh0stTalk3r  Schreiben Sie einen Gästebucheintrag für Gh0stTalk3r

Beiträge: 93
Registriert: 19.12.2014

SolidWorks 2023 SP 5.0; PDM Standard; MegaCAD 2021

erstellt am: 30. Apr. 2025 10:17    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Zitat:
Original erstellt von ad_man:
das müsste doch so funktionieren:

https://help.solidworks.com/2024/english/api/sldworksapi/rename_components_and_save_assembly_example_vb.htm


Das sieht gut aus. Hat in meinem Test auch geklappt.

@Holger.S

Ich muss das für einen Export machen (also raus aus dem PDM). Es soll ein CustomProperty mit in den Dateinamen. Bei meinem damaligen Versuch mit pack and go bin ich nicht weitergekommen (auch, wenn es hier schon ein ähnliches Makro gab).

------------------
gruß,
Markus

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Gh0stTalk3r
Mitglied



Sehen Sie sich das Profil von Gh0stTalk3r an!   Senden Sie eine Private Message an Gh0stTalk3r  Schreiben Sie einen Gästebucheintrag für Gh0stTalk3r

Beiträge: 93
Registriert: 19.12.2014

SolidWorks 2023 SP 5.0; PDM Standard; MegaCAD 2021

erstellt am: 06. Mai. 2025 16:41    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

So ist übrigens der aktuelle Status.

Funktioniert scheinbar 
Für mein erstes Mal bin ich ganz zufrieden.


Code:
Option Explicit

Dim 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 >>)

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen

nächster neuerer Beitrag | nächster älterer Beitrag
Antwort erstellen


Diesen Beitrag mit Lesezeichen versehen ... | Nach anderen Beiträgen suchen | CAD.de-Newsletter

Administrative Optionen: Beitrag schliessen | Archivieren/Bewegen | Beitrag melden!

Fragen und Anregungen: Kritik-Forum | Neues aus der Community: Community-Forum

(c)2025 CAD.de | Impressum | Datenschutz