| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für SOLIDWORKS |
| |
| Dassault Systèmes auf der Hannover Messe 2024 (kostenlose Tickets verfügbar) |
Autor
|
Thema: Makro Kind ersetzen (1076 mal gelesen)
|
Joker15 Mitglied Konstrukteur
Beiträge: 22 Registriert: 09.06.2015 SolidWorks 2013
|
erstellt am: 26. Jan. 2018 14:04 <-- editieren / zitieren --> Unities abgeben:
Hallo zusammen, ich kenn mich mit dem Programmieren von Makros nur mäßig aus, aber vllt könnt ihr mir in folgendem Fall helfen: Ich möchte die Eigenschaften der "Kinder" in einer BG auslesen, steht eine Bestimmte Eigenschaft in der Datei und liegt diese im falschen Pfad soll diese durch eine in einem anderen Pfad befindliche ausgetauscht werden. Bis in die IF Schleife dass es ausgetauscht werden soll komme ich, leider jedoch nicht weiter! Was mache ich falsch? Beim Smiley kommt der Fehler! :P Danke im Voraus! Code:
Sub Main()Dim MDPro_Norm As String Dim MDPRO_OutputPath As String Dim Pfad As String Dim boolstatus As Boolean Dim childdoc As SldWorks.ModelDoc2 Set swApp = Application.SldWorks Set AssemblyDoc = swApp.ActiveDoc Set Configuration = AssemblyDoc.GetActiveConfiguration() Set RootComponent = Configuration.GetRootComponent() Set myShell = CreateObject("shell.application")
i = 0 'Kinder zählem Children = RootComponent.GetChildren ChildCount = UBound(Children)
Debug.Print ChildCount Do While i <= ChildCount Set SWComponent = Children(i) Set childdoc = SWComponent.GetModelDoc() If Not childdoc Is Nothing Then 'aktuellen Pfad ermitteln Pfad = childdoc.GetPathName Debug.Print Pfad 'MDPro_Norm auslesen MDPro_Norm = childdoc.GetCustomInfoValue("", "MDPro_Norm") Debug.Print MDPro_Norm 'MDPRO_OutputPath auslesen MDPRO_OutputPath = childdoc.GetCustomInfoValue("", "MDPRO_OutputPath") Debug.Print MDPRO_OutputPath If (Pfad Like "C:\keytech\SW*" And MDPro_Norm = "1") Then boolstatus = childdoc.ReplaceComponents(MDPRO_OutputPath, "", True, True) End If End If i = i + 1 Loop End Sub
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
HenryV Mitglied Konstrukteur, Engineering
Beiträge: 813 Registriert: 18.05.2005 SolidWorks 2022 x64 SP5.0 Dell Precision 5820 Intel Xeon W-2125 4x4GHz NVIDIA Quadro P2000 5GB 32GB RAM 2x Dell U2412M, 24" TFT Windows 10 Enterprise x64 22H2 Microsoft 365 E5 Microsoft Visual Studio Enterprise 2022
|
erstellt am: 26. Jan. 2018 16:15 <-- editieren / zitieren --> Unities abgeben: Nur für Joker15
|
Joker15 Mitglied Konstrukteur
Beiträge: 22 Registriert: 09.06.2015 SolidWorks 2013
|
erstellt am: 30. Jan. 2018 08:29 <-- editieren / zitieren --> Unities abgeben:
Hallo Henry, in MDPro_OutputPath steht der Pfad+Dateiname+Dateiendung (C:\MDPRO_TEST\V2320\CADOutput\MTS2\ST\BS81\ST-81-D-0001139.sldprt) Die Methode funktioniert schon auch für Teile oder? EDIT: Gerade nochmal nachgelesen, des wird mein Problem sein: You cannot replace a selected component with a component of the same name even if the components are in different folders. Hab jedoch auch versucht die Datei gegen eine mit anderem Namen auszutauschen und hat nicht geklappt!
[Diese Nachricht wurde von Joker15 am 30. Jan. 2018 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Christian_W Ehrenmitglied V.I.P. h.c. Konstrukteur (Dipl-Ing)
Beiträge: 3189 Registriert: 04.04.2001 CSWP 12/2015<P>SWX2021sp5 Win10/11 (SWX2016, SWX2012) proAlpha6.2e00/calinkV9 (Tactonworks) (Medusa7, NesCAD2010, solidEdge19)
|
erstellt am: 30. Jan. 2018 09:33 <-- editieren / zitieren --> Unities abgeben: Nur für Joker15
Zitat: ... Gerade nochmal nachgelesen, des wird mein Problem sein: You cannot replace a selected component with a component of the same name even if the components are in different folders. ...
Hallo, ich würd dann probieren mit Referenzen ändern die Pfade zu korrigieren. gibt ein externes Progrämmchen dafür, aber das sollte auch in ein Makro gehen ... Gruß, Christian
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Nobbi Mitglied Techniker
Beiträge: 151 Registriert: 21.08.2002 Windows 10 Enterprise SW2001 - SW2019 MDT ACPIx64-basierter PC NVIDIA Quadro M4000 Space Pilot SAP-Cideon
|
erstellt am: 30. Jan. 2018 12:08 <-- editieren / zitieren --> Unities abgeben: Nur für Joker15
|
Joker15 Mitglied Konstrukteur
Beiträge: 22 Registriert: 09.06.2015 SolidWorks 2013
|
erstellt am: 31. Jan. 2018 08:50 <-- editieren / zitieren --> Unities abgeben:
Hallo Christian, wo find ich das Programm? Referenz kann ich ja nur beim öffnen der Baugruppe ändern oder? Nobbi was meinst du mit Pack and go? Die Datei gibt es an 2 Pfaden und ich möchte sie nur austauschen. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Christian_W Ehrenmitglied V.I.P. h.c. Konstrukteur (Dipl-Ing)
Beiträge: 3189 Registriert: 04.04.2001 CSWP 12/2015<P>SWX2021sp5 Win10/11 (SWX2016, SWX2012) proAlpha6.2e00/calinkV9 (Tactonworks) (Medusa7, NesCAD2010, solidEdge19)
|
erstellt am: 31. Jan. 2018 09:03 <-- editieren / zitieren --> Unities abgeben: Nur für Joker15
|
Nobbi Mitglied Techniker
Beiträge: 151 Registriert: 21.08.2002 Windows 10 Enterprise SW2001 - SW2019 MDT ACPIx64-basierter PC NVIDIA Quadro M4000 Space Pilot SAP-Cideon
|
erstellt am: 31. Jan. 2018 10:40 <-- editieren / zitieren --> Unities abgeben: Nur für Joker15
|
Joker15 Mitglied Konstrukteur
Beiträge: 22 Registriert: 09.06.2015 SolidWorks 2013
|
erstellt am: 01. Feb. 2018 11:29 <-- editieren / zitieren --> Unities abgeben:
Hallo zusammen, ich hab meine eigene Lösung gefunden: -ich speicher alle Dateien die falsch liegen in ein Array -schließe die Baugruppe -öffne alle Kinderdateien aus dem richtigen Pfad -öffne die Baugruppe, welche auf die bereits offenen Kinder zugreift Danke euch trotzdem allen! Code:
Sub Main()Dim MDPro_Norm As String Dim MDPRO_OutputPath As String Dim Pfad As String Dim boolstatus As Boolean Dim childdoc As SldWorks.ModelDoc2 Dim instance As IAssemblyDoc Dim strArray(50) As String Dim assemblydocPath As String Set swApp = Application.SldWorks Set AssemblyDoc = swApp.ActiveDoc Set Configuration = AssemblyDoc.GetActiveConfiguration() Set RootComponent = Configuration.GetRootComponent() Set myshell = CreateObject("shell.application")
i = 0 j = 0 'Kinder zählem children = RootComponent.GetChildren ChildCount = UBound(children) Debug.Print ChildCount Do While i <= ChildCount Set swcomponent = children(i) Set childdoc = swcomponent.GetModelDoc() assemblydocPath = AssemblyDoc.GetPathName ' Set instance = swApp.children(i) If Not childdoc Is Nothing Then 'aktuellen Kindpfad ermitteln Pfad = childdoc.GetPathName 'Baugruppe Pfad ermitteln AssemblydocTitle = AssemblyDoc.GetTitle 'akteullen KindTitel ermitteln childdoctitle = childdoc.GetTitle Debug.Print Pfad 'MDPro_Norm auslesen MDPro_Norm = childdoc.GetCustomInfoValue("", "MDPro_Norm") Debug.Print MDPro_Norm 'MDPRO_OutputPath auslesen MDPRO_OutputPath = childdoc.GetCustomInfoValue("", "MDPRO_OutputPath") Debug.Print MDPRO_OutputPath If (Pfad Like "C:\keytech\SW*" And MDPro_Norm = "1") Then strArray(j) = MDPRO_OutputPath & childdoctitle MDPRO_OutputPath = "" j = j + 1 End If End If i = i + 1 Loop k = 0 'Baugruppe speichern AssemblyDoc.Save 'Baugruppe schließen swApp.CloseDoc (AssemblydocTitle) Do While k < j 'Falsche Komponenten aus Outputpfad öffnen Set swModelTemp = swApp.OpenDoc(strArray(k), swDocPART) k = k + 1 Loop 'Baugruppe wieder öffnen Set swModelTemp = swApp.OpenDoc(assemblydocPath, swDocASSEMBLY) End Sub
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |