Umbenennen aller Komponenten in einer Baugruppe, auch derjenigen, die in einer Unterbaugruppe enthalten sind

Alles klar 

Nun, ich habe nicht die Möglichkeit, den Namen der Datei anzuzeigen, was mir seltsam vorkommt ...


capture.png

Es ist unter "Komponentennamen anzeigen" versteckt. Der Name der Komponente ist identisch mit dem Namen des Datensatzes.

Andernfalls sollten Sie in den allgemeinen Optionen auf der externen Referenzebene nachsehen, ob die Option "Komponentennamen aktualisieren, wenn Dokumente ersetzt werden" aktiviert ist.

1 „Gefällt mir“

Super, diese Option der externen Referenzen wurde :) nicht angekreuzt!  

Ich habe es seit heute Morgen an mehreren Baugruppen getestet, und ich habe immer noch eine traurige Frage^^ 

Gibt es Fälle, in denen die Umbenennungsfunktion nicht funktioniert? 

Da ich hier zwei Teile habe, die nicht umbenannt werden, ich aber das Programm Schritt für Schritt eingebe, gibt es sie weiter und löst die Zeile aus: errorsRename = swModel.Extension.RenameDocument(newName)

Aber benennen Sie es nicht um. Haben Sie eine Idee? 

Schönes Wochenende

Hallo 

nach intensiver Nutzung des Makros. Ich stelle fest, dass ich je nach Konfiguration meiner Teile oft einen Fehler habe, da wir beide Sprachen (Standard und Standard) haben. Wie können wir diesen Fehler überwinden und beide Fälle berücksichtigen? 

Danke im Voraus, 

Schönen Tag 

Hallo

Ich hatte die erste Frage nicht gesehen.

Für das Umbenennungsproblem müssen Sie sich ansehen, was die Variable ErrorsRename zurückgibt und in der Hilfe sehen, was diesem Fehler entspricht: 

 http://help.solidworks.com/2020/english/api/swconst/SolidWorks.Interop.swconst~SolidWorks.Interop.swconst.swRenameDocumentError_e.html

Für den Rest müssen Sie eine zusätzliche Prüfung hinzufügen, wie im folgenden Code beschrieben:

Sub TraverseComponent(swComp As SldWorks.Component2, nLevel As Long)
    Dim vChildComp As Variant
    Dim swChildComp As Component2
    Dim i As Long
    Dim swModelChild As SldWorks.ModelDoc2
    Dim swCustProp As CustomPropertyManager
    Dim val As String
    Dim valout As String

    vChildComp = swComp.GetChildren
    For i = 0 To UBound(vChildComp)
        Set swChildComp = vChildComp(i)
        TraverseComponent swChildComp, nLevel + 1
        swChildComp.Select4 False, SwSelData, False
        Set swModelChild = swChildComp.GetModelDoc2
        Set swCustProp = swModelChild.Extension.CustomPropertyManager("Défaut") 'mettre le nom de la configuration comprenant la propriété
        If swCustProp Is Nothing Then
            Set swCustProp = swModelChild.Extension.CustomPropertyManager("Default")
        End If
        If Not swCustProp Is Nothing Then
        status = swCustProp.Get4("SWOODCP_PanelStockLength", False, val, valout)
        If valout <> "" Then
            newName = NomParent & "-" & "000" & j
            errorsRename = swModel.Extension.RenameDocument(newName)
            swChildComp.Name2 = newName
            Debug.Print swModelChild.GetTitle & " : " & j & " - " & errorsRename
            j = j + 1
        End If
        End If
    Next i
End Sub

 

Ja ich hatte darüber nachgedacht, aber schon beim "swCust set.... "Da es die Konfiguration nicht finden kann, stürzt es ab und ich weiß nicht, wie ich es machen soll. 

Bei der ersten Frage geht es darum, dass das Teil bereits in den Explorer-Fenstern vorhanden war, aber nicht in der Baugruppe.

Hallo

Ich denke, es kommt von etwas anderem. Ich persönlich habe keine Probleme mit der Bedienung, auch wenn die Konfiguration nicht vorhanden ist.

swCustProp bleibt leer und daher gibt es keine Umbenennung oder irgendetwas anderes in der betreffenden Datei.

Wurde der Code unverändert in Ihr Makro eingebettet oder wurde er geändert, um ihn in Ihren Code zu integrieren?

Hallo Cyril, 

Ich poste meinen gesamten Code. Ich habe zwei Schleifen gesetzt, denn wenn ich meine Figuren bereits umbenannt habe, hat es nicht funktioniert, also benenne ich sie zuerst mit einem Zähler um (1,2,3,4...), dann benenne ich sie mit dem Lineal um. 

Option Explizit

Dim swApp als SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim swRootComp als SldWorks.Component2
Dimmen von Kindern als Variante
Dim swChild As SldWorks.Component2
Dim SwSelData As SldWorks.SelectData
Dim ChildCount so lange
Dim oldName als Zeichenfolge
Dimmen newName als Zeichenfolge
Sonne j So lang
Sonne h So lange
Dim ParentName als Zeichenfolge
DimmfehlerUmbenennen wie lang
Status dimmen: Als boolescher Wert
Schwache Warnungen So lange
Sparen Sie so lange
Dim swModelDocExt als ModelDocExtension
Dim swCustProp As CustomPropertyManager
Dim bool als boolescher Wert
Dim val As String
Dim valout As String

Sub main()

Legen Sie swApp = Application.SldWorks fest

Festlegen von swModel = swApp.ActiveDoc
Übergeordneter Name = Links(swModel.GetTitle, 7)
Legen Sie swRootComp = swModel.ConfigurationManager.ActiveConfiguration.GetRootComponent3(True) fest.
j = 1
h = 1
TraverseComponent swRootComp, 1
swModel.ForceRebuild3 Wahr
status = swModel.Save3(swSaveAsOptions_SaveReferenced, errorsSave, Warnungen)

Ende Sub


Sub TraverseComponent(swComp As SldWorks.Component2, nLevel As Long)
    Dim vChildComp als Variante
    Dim swChildComp als Komponente2
    Dim swModelChild als SldWorks.ModelDoc2
    Dim swCustProp As CustomPropertyManager
    Dim val As String
    Dim valout As String
    Sonne i So lang
    
    Dim status2 als boolescher Wert
    Dim val1 als Zeichenfolge
    Dim valout1 als Zeichenfolge
    
    vChildComp = swComp.GetChildren
    Für i = 0 TB UBound(vChildComp)
        Legen Sie swChildComp = vChildComp(i) fest.
        TraverseComponent swChildComp, nLevel + 1
        swChildComp.Select4 Falsch, SwSelData, Falsch
        Legen Sie swModelChild = swChildComp.GetModelDoc2 fest
        Set swCustProp = swModelChild.Extension.CustomPropertyManager("Default") ' setze den Namen der Konfiguration ein, einschließlich der
        Wenn nicht, ist swCustProp nichts, dann
            status = swCustProp.Get4("SWOODCP_PanelStockLength", False, val, valout)
            status2 = swCustProp.Get4("HARDWARE", Falsch, val1, valout1)
            
            If valout <> "" Or valout1 <> "" Dann
                newName = h
                errorsRename = swModel.Extension.RenameDocument(newName)
                Debug.Print swModelChild.GetTitle & " : " & h & " - " & errorsUmbenennen
                h = h + 1
            Ende, wenn
        Ende, wenn
    Weiter i
    
        Für i = 0 TB UBound(vChildComp)
        Legen Sie swChildComp = vChildComp(i) fest.
        TraverseComponent swChildComp, nLevel + 1
        swChildComp.Select4 Falsch, SwSelData, Falsch
        Legen Sie swModelChild = swChildComp.GetModelDoc2 fest
        Set swCustProp = swModelChild.Extension.CustomPropertyManager("Default") ' Setze den Namen der Konfiguration, einschließlich der
        Wenn nicht, ist swCustProp nichts, dann
            status = swCustProp.Get4("SWOODCP_PanelStockLength", False, val, valout)
            status2 = swCustProp.Get4("HARDWARE", Falsch, val1, valout1)
            
            If valout <> "" Or valout1 <> "" Dann
                newName = Übergeordneter Name & "-000" & j
                Wenn Len(newName) > 12, dann
                    newName = Links(neuerName, 8) und Rechts(neuer Name, 4)
                Ende, wenn
                errorsRename = swModel.Extension.RenameDocument(newName)
                Debug.Print swModelChild.GetTitle & " : " & j & " - " & errorsUmbenennen
                j = d + 1
            Ende, wenn
        Ende, wenn
    Weiter i
Ende Sub

 

Ich habe es noch nicht überprüft, aber beim ersten Ansatz denke ich, dass das Problem von der zweiten Schleife herrührt.

Die swChild-Variable wird wahrscheinlich geleert, nachdem die erste Ausführung übergeben wurde.

Hallo Cyril, 

swChild wird nicht auf nichts zurückgesetzt, ich verstehe nicht, wie es leer sein soll.

Hallo

Ich persönlich habe kein Problem mit diesem Makro. So wie es aussieht, sehe ich nicht, was blockiert (ich habe Dateien, die keine benannte Konfiguration wie die anvisierten haben, und es geht ohne Probleme weiter).

Was ist die Fehlermeldung, die gemeldet wird?

Hallo 

Ich habe mit GetActiveConfiguration eine Lösung gefunden, sodass ich alle Konfigurationen berücksichtige, keine Übersetzungsprobleme. 

Hallo Cyril, 

Ich habe einige weitere Tests durchgeführt und habe ein Beispiel, das ich in einer ZIP-Datei anhänge. 

Ich habe den Eindruck, dass es nicht alle Dateien der Montage durchgeht und ich verstehe wirklich nicht, warum... Am Ende waren meine Ferien nicht :D!  

Vielen Dank für Ihre Hilfe im Voraus, 

Schönen Tag 

Vincent 


1500000-0000.zip
umbenennen.swp