Wijzig de naam van alle onderdelen in een assembly, zelfs de componenten die deel uitmaken van een subassembly

OK 

nou, ik heb niet de mogelijkheid om de naam van het bestand weer te geven, wat me raar lijkt...


capture.png

Het is verborgen in "Componentnamen weergeven". De naam van de component is hetzelfde als de naam van de record.

Anders moet u in de algemene opties op extern referentieniveau kijken als de optie "Componentnamen bijwerken bij het vervangen van documenten" is aangevinkt.

1 like

Geweldig, deze optie van externe verwijzingen is niet :) aangevinkt!  

Ik heb het sinds vanmorgen op verschillende assemblages getest en ik heb nog steeds een spijtige vraag^^ 

Zijn er gevallen waarin de hernoemingsfunctie niet werkt? 

Omdat ik hier twee delen heb die niet worden hernoemd, maar ik geef het programma stap voor stap door, het geeft ze door en activeert de regel: errorsRename = swModel.Extension.RenameDocument(newName)

Maar hernoem het niet. Heb je een idee? 

Fijn weekend

Hallo 

na intensief gebruik van de macro. Ik merk dat ik, afhankelijk van de configuratie van mijn onderdelen, vaak een foutmelding heb omdat we beide talen hebben (standaard en standaard). Hoe kunnen we deze fout achter ons laten en beide gevallen in overweging nemen? 

Bij voorbaat dank, 

Fijne dag 

Hallo

De eerste vraag had ik niet gezien.

Voor het hernoemingsprobleem moet je kijken naar wat de variabele ErrorsRename retourneert en in de help zien waar deze fout mee overeenkomt: 

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

Voor de rest moet je een extra vinkje toevoegen zoals in de onderstaande code:

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, ik had er wel over nagedacht, maar al bij de "swCust set.... " omdat het de configuratie niet kan vinden, crasht het en ik weet niet hoe ik het moet doen. 

Voor de eerste vraag is het eigenlijk dat het onderdeel al bestond in de vensters van de verkenner, maar niet in de assemblage zat.

Hallo

Ik denk dat het van iets anders komt. Persoonlijk heb ik geen problemen met de bediening, zelfs als de configuratie niet bestaat.

swCustProp blijft leeg en daarom is er geen hernoeming of iets anders op het betreffende bestand.

Is de code ingesloten zoals deze is in uw macro of is deze gewijzigd om in uw code te integreren?

Hallo Cyril, 

Ik post al mijn code. Ik heb twee lussen gezet omdat als ik mijn stukken al heb hernoemd, het niet werkte, dus ik hernoem ze eerst met een teller (1,2,3,4...) en daarna hernoem ik ze met de liniaal. 

Optie Expliciete

Dim swApp als SldWorks.SldWorks
Dim swModel als SldWorks.ModelDoc2
Dim swRootComp als SldWorks.Component2
Dim Kinderen Als Variant
Dim swChild As SldWorks.Component2
Dim SwSelData als SldWorks.SelectData
Dim ChildCount zo lang
Dim oldName als tekenreeks
Dim newName als tekenreeks
Zon j Zo lang
Zon h Zo lang
Dim ParentName als tekenreeks
Dim foutenHernoem zo lang
Dim status Als Booleaans
Dim waarschuwingen zo lang
Bespaar zo lang
Dim swModelDocExt als ModelDocExtension
Dim swCustProp als CustomPropertyManager
Dim bool als Booleaanse
Dim val als snaar
Dim valout als snaar

Sub hoofd()

Stel swApp = Toepassing.SldWorks in

Stel swModel = swApp.ActiveDoc in
ParentName = Links(swModel.GetTitle, 7)
Stel swRootComp in = swModel.ConfigurationManager.ActiveConfiguration.GetRootComponent3(True)
j = 1
h = 1
TraverseComponent swRootComp, 1
swModel.ForceRebuild3 Waar
status = swModel.Save3(swSaveAsOptions_SaveReferenced, foutenOpslaan, waarschuwingen)

Einde Sub


Sub TraverseComponent(swComp als SldWorks.Component2, nLevel zo lang)
    Dim vChildComp als variant
    Dim swChildComp als component2
    Dim swModelChild As SldWorks.ModelDoc2
    Dim swCustProp als CustomPropertyManager
    Dim val als snaar
    Dim valout als snaar
    Zon i Zo lang
    
    Dim status2 Als Booleaans
    Dim val1 Als String
    Dim valout1 als snaar
    
    vChildComp = swComp.GetChildren
    Voor i = 0 TB UBound(vChildComp)
        Stel swChildComp in = vChildComp(i)
        TraverseComponent swChildComp, nLevel + 1
        swChildComp.Select4 Onwaar, SwSelData, Onwaar
        Stel swModelChild in = swChildComp.GetModelDoc2
        Set swCustProp = swModelChild.Extension.CustomPropertyManager("Default") ' zet de naam van de configuratie inclusief de
        Zo niet, dan is swCustProp niets
            status = swCustProp.Get4("SWOODCP_PanelStockLength", False, val, valout)
            status2 = swCustProp.Get4("HARDWARE", Onwaar, val1, valout1)
            
            Als valout <> "" Of valout1 <> "" Dan
                newName = h
                errorsRename = swModel.Extension.RenameDocument(newName)
                Debug.Print swModelChild.GetTitle & " : " & h & " - " & errorsRename
                h = h + 1
            Einde als
        Einde als
    volgende i
    
        Voor i = 0 TB UBound(vChildComp)
        Stel swChildComp in = vChildComp(i)
        TraverseComponent swChildComp, nLevel + 1
        swChildComp.Select4 Onwaar, SwSelData, Onwaar
        Stel swModelChild in = swChildComp.GetModelDoc2
        Set swCustProp = swModelChild.Extension.CustomPropertyManager("Default") ' stel de naam van de configuratie in, inclusief de
        Zo niet, dan is swCustProp niets
            status = swCustProp.Get4("SWOODCP_PanelStockLength", False, val, valout)
            status2 = swCustProp.Get4("HARDWARE", Onwaar, val1, valout1)
            
            Als valout <> "" Of valout1 <> "" Dan
                newName = Oudernaam & "-000" & j
                Als Lin (newName) > 12 dan
                    newName = Links(nieuweNaam, 8) & Rechts(nieuweNaam, 4)
                Einde als
                errorsRename = swModel.Extension.RenameDocument(newName)
                Debug.Print swModelChild.GetTitle & " : " & j & " - " & errorsRename
                j = d + 1
            Einde als
        Einde als
    volgende i
Einde Sub

 

Ik heb het nog niet gecontroleerd, maar bij de eerste benadering denk ik dat het probleem uit de tweede lus komt.

De swChild-variabele wordt waarschijnlijk gespoeld nadat de eerste run is gepasseerd.

Hallo Cyril, 

swChild is niet gereset naar niets, ik begrijp niet hoe het leeg zou zijn.

Hallo

Persoonlijk heb ik geen probleem met deze macro. Zoals het er nu uitziet, zie ik niet wat er blokkeert (ik heb bestanden die geen benoemde configuratie hebben zoals de beoogde en het gaat zonder enig probleem door).

Wat is de foutmelding die wordt gemeld?

Hallo 

Ik heb een oplossing gevonden met GetActiveConfiguration dus ik houd rekening met alle configuraties zonder vertaalproblemen. 

Hallo Cyril, 

Ik heb nog wat tests gedaan en ik heb een voorbeeld dat ik bijvoeg in een ZIP-bestand. 

Ik heb de indruk dat het niet alle dossiers van de vergadering doorneemt en ik begrijp echt niet waarom... Uiteindelijk waren mijn vakanties niet :D!  

Bij voorbaat dank voor uw hulp, 

Fijne dag 

Vincent 


1500000-0000.zip
hernoemen.swp