Macro om de naam van een assembly en zijn componenten te wijzigen

Hallo

 

Ik wil graag een macro maken op Solidworks om een assembly en zijn componenten te hernoemen volgens het volgende principe:

"Project Number-ES00" voor montage

"Projectnummer-ES0i" voor de i-de subassemblage (1e niveau)

"Projectnummer-ES0i-C00j" voor het jde deel van de i-de subassemblage (2e niveau)

 

De creatieboom moet er bijvoorbeeld als volgt uitzien:

INT846-ES00

INT846-ES01

INT846-ES01-C001

INT846-ES01-C002

INT846-ES01-C003

INT846-ES01-C004

INT846-ES02

INT846-ES02-C001

INT846-ES02-C002

INT846-ES03

INT846-ES04

 

Ik kan het herhalingsprincipe in VBA coderen, maar ik weet niet hoe ik een assembly en zijn componenten opnieuw moet registreren, rekening houdend met de boom als geheel. Dan weet ik niet hoe ik door de creatieboom van het betreffende geheel moet gaan.

 

Als je voorstellen hebt, ben ik een en al oor!

 

Bedankt voor degenen die mijn vraag zullen beantwoorden.

 

PS: Ik gebruik Solidworks 2013

 

 

 

 

 

 

 

 

Hallo, toevallig kun je dit niet gebruiken?

 

http://www.lynkoa.com/store/fr/tools-et-macros/utilitaires/utilitaire-projectmanager.html

1 like
Projectmanager, hij moet weten hoe hij dat moet doen
2 likes

Dank u voor de snelheid van uw antwoorden.

Ik weet niet hoe het zit met ProjectManager. Door de link te volgen, zag ik dat het hulpprogramma wordt betaald.

Is er geen gratis of goedkopere manier?

Hallo

 

 

De code zou er als volgt uit moeten zien:

 

Sub Hoofd()

Dim swApp als SldWorks.SldWorks
Document dimmen als SldWorks.ModelDoc2
Dim retval() Als String
Dim tekst als tekenreeks
dim name() als tekenreeks

Stel swApp = CreateObject("SldWorks.Application") in
Document instellen = swApp.ActiveDoc
 

retval = Document.GetDependencies2(Onwaar, Waar, Onwaar)

'Regels om alleen de bestandsnamen te hebben
ReDim Naam(1 TB ((UBound(retval) - 1) / 2) + 1)
Voor i = 0 TB (UBound(retval) - 1) / 2 
   Tekst = Tekst & reactie(2 * i) & vbCr
   Naam(i + 1) = retval(2 * i) 
volgende i
i = 0

 

MsgBox Tekst

Einde Sub

 

 

Bron: http://www.forum-cao-3d.fr/viewtopic.php?t=5432

 

 

Als je nog andere vragen hebt over macro's, voel je vrij om een andere vraag over Lynkoa te openen!

Hallo

 

In principe zou het het meest efficiënt zijn om de bestanden buiten SW te hernoemen en vervolgens de externe verwijzingen van de documenten om te leiden...

 

Maar het is ingewikkeld voor qlq die niet  de abitude van SW API's

 

De eenvoudigste ontwikkelingskant is om de assemblage te openen en door de componenten te bladeren en vervolgens elk van de documenten op te slaan, aangezien de hoofdassemblage open is, zal SW zelf de verwijzingen omleiden ...

Er zijn gewoon de oude bestanden met de oude namen die handmatig moeten worden verwijderd

 

Een recursie op componenten maken (loop door de hele assemblagestructuur) 

 

het voorbeeld ophalen uit de API-Help 

"Voorbeeld van assemblage op componentniveau (VBA)"

 

Het startpunt voor de marco is de MAin-procedure

 

In dit voorbeeld wordt de functie TraverseComponent uitgevoerd op elke component, het swComp-object bevat de component en de nLevel-variabele bevat het niveau van de component in de boom (bijv. 1 voor het 1e niveau, 2 voor de component van een subassemblage, 3 enz ...)

 

u moet nog steeds de documentregistratiecode toevoegen (het document wordt verkregen uit de "component" door de GetmodelDoc API)

 

Zorg ervoor dat u het voorkomen van componenten beheert (hetzelfde onderdeel kan meerdere keren aanwezig zijn), alleen het eerste exemplaar moet worden verwerkt

 

 

8 likes

Hallo

 

Jfradon, ik heb je advies opgevolgd. En ik heb een macro geschreven die neigt naar wat ik wil.

 

Maar ik kan het model van mijn componenten niet opslaan.

Ik heb een fout bij (swCompModel.SaveAs2 NewFilePath, 0, False, False)

 

 


renommer_fichier.txt

...

Slik, ik kan DSL niet opzeggen

Ja, de macro ziet er goed uit voor mij

Je moet gewoon de 1°-componenten (basiscomponenten van de hoofdassemblage) anders beheren

in feite is het geen onderdeel 

dus als na

Stel swCompModel = swComp.GetModelDoc in

 

swCompModel  is niets, dus gebruik geen swCompModel  maar swModel, dat is het montagedocument

7 likes

Als het goed is, sluit je de positie?

4 likes