Ich möchte ein Makro auf Solidworks erstellen, um eine Baugruppe und ihre Komponenten nach folgendem Prinzip umzubenennen:
"Projektnummer-ES00" für die Montage
"Projektnummer-ES0i" für die i-te Baugruppe (1. Ebene)
"Projektnummer-ES0i-C00j" für den j-ten Teil der i-ten Baugruppe (2. Ebene)
Der Erstellungsbaum sollte beispielsweise wie folgt aussehen:
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
Ich kann das Wiederholungsprinzip in VBA codieren, aber ich weiß nicht, wie ich eine Assembly und ihre Komponenten unter Berücksichtigung des Baums als Ganzes neu registrieren kann. Dann weiß ich nicht, wie ich den Erstellungsbaum der betreffenden Assembly durchlaufen soll.
Wenn Sie Vorschläge haben, bin ich ganz Ohr!
Vielen Dank für diejenigen, die meine Frage beantworten werden.
Dim swApp als SldWorks.SldWorks Dokument als SldWorks.ModelDoc2 dimmen Dim retval() als Zeichenkette Text als Zeichenfolge dimmen dim name() als String
Set swApp = CreateObject("SldWorks.Application") Set Document = swApp.ActiveDoc
'Zeilen, um nur die Dateinamen zu haben ReDim-Name(1 TB ((UBound(retval) - 1) / 2) + 1) Für i = 0 TB (UBound(retval) - 1) / 2 Text = Text & retval(2 * i) & vbCr Name(i + 1) = retval(2 * i) Weiter i i = 0
Im Prinzip wäre es am effizientesten, die Dateien außerhalb von SW umzubenennen und dann die externen Referenzen der Dokumente umzuleiten...
Aber es ist kompliziert für qlq, das nicht über die Fähigkeiten von SW-APIs verfügt
Die einfachste Entwicklungsseite besteht darin, die Assembly zu öffnen und die Komponenten zu durchsuchen und dann jedes der Dokumente zu speichern, da die Hauptassembly geöffnet ist, leitet SW selbst die Verweise um ...
Es gibt einfach die alten Dateien mit den alten Namen, die manuell gelöscht werden müssen
So erstellen Sie eine Rekursion für Komponenten (durchlaufen Sie die gesamte Baugruppenstruktur)
Abrufen des Beispiels aus der API-Hilfe
"Beispiel für eine Traversenbaugruppe auf Komponentenebene (VBA)"
Der Einstiegspunkt für den Marco ist das MAin-Verfahren
In diesem Beispiel wird die Funktion TraverseComponent für jede Komponente ausgeführt, das swComp-Objekt enthält die Komponente, und die Variable nLevel enthält die Ebene der Komponente in der Struktur (z. B. 1 für die 1. Ebene, 2 für die Komponente einer Unterbaugruppe, 3 usw. ...)
Sie müssen noch den Registrierungscode für das Dokument hinzufügen (das Dokument wird von der GetmodelDoc-API aus der "Komponente" abgerufen)
Achten Sie darauf, das Vorkommen von Komponenten zu verwalten (dieselbe Komponente kann mehrmals vorhanden sein), nur das erste Vorkommen sollte verarbeitet werden