Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  SolidWorks
  Makro Kind ersetzen

Antwort erstellen  Neues Thema erstellen
CAD.de Login | Logout | Profil | Profil bearbeiten | Registrieren | Voreinstellungen | Hilfe | Suchen

Anzeige:

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen nächster neuer Beitrag | nächster älterer Beitrag
  
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


Sehen Sie sich das Profil von Joker15 an!   Senden Sie eine Private Message an Joker15  Schreiben Sie einen Gästebucheintrag für Joker15

Beiträge: 22
Registriert: 09.06.2015

SolidWorks 2013

erstellt am: 26. Jan. 2018 14:04    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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


Sehen Sie sich das Profil von HenryV an!   Senden Sie eine Private Message an HenryV  Schreiben Sie einen Gästebucheintrag für HenryV

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Joker15 10 Unities + Antwort hilfreich

Hallo

Um deine Frage zu beantworten musst du ein paar Fragen beantworten.

Hast du die Remarks von ReplaceComponents Method (IAssemblyDoc) beachtet?
Was steht in MDPRO_OutputPath? (Pfad und neuer Dateiname oder doch nur Pfad)

Gruss Andreas

------------------
21 ist nur die halbe Antwort.

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Joker15
Mitglied
Konstrukteur


Sehen Sie sich das Profil von Joker15 an!   Senden Sie eine Private Message an Joker15  Schreiben Sie einen Gästebucheintrag für Joker15

Beiträge: 22
Registriert: 09.06.2015

SolidWorks 2013

erstellt am: 30. Jan. 2018 08:29    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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)


Sehen Sie sich das Profil von Christian_W an!   Senden Sie eine Private Message an Christian_W  Schreiben Sie einen Gästebucheintrag für Christian_W

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Joker15 10 Unities + Antwort hilfreich

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


Sehen Sie sich das Profil von Nobbi an!   Senden Sie eine Private Message an Nobbi  Schreiben Sie einen Gästebucheintrag für Nobbi

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Joker15 10 Unities + Antwort hilfreich

Hallo
hast du es mit Pack &Go versucht
Gruß Nobbi

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Joker15
Mitglied
Konstrukteur


Sehen Sie sich das Profil von Joker15 an!   Senden Sie eine Private Message an Joker15  Schreiben Sie einen Gästebucheintrag für Joker15

Beiträge: 22
Registriert: 09.06.2015

SolidWorks 2013

erstellt am: 31. Jan. 2018 08:50    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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)


Sehen Sie sich das Profil von Christian_W an!   Senden Sie eine Private Message an Christian_W  Schreiben Sie einen Gästebucheintrag für Christian_W

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Joker15 10 Unities + Antwort hilfreich

Hallo,

entweder beim Öffnen oder wenn es noch zu ist mit dem Programm
ist aber beides manuell.

Gruß, Christian

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Nobbi
Mitglied
Techniker


Sehen Sie sich das Profil von Nobbi an!   Senden Sie eine Private Message an Nobbi  Schreiben Sie einen Gästebucheintrag für Nobbi

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Joker15 10 Unities + Antwort hilfreich

Hi Jocker
SolidWorks - Datei - Pack und Go. Baugruppe sollte offen sein
Gruß Nobbi

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Joker15
Mitglied
Konstrukteur


Sehen Sie sich das Profil von Joker15 an!   Senden Sie eine Private Message an Joker15  Schreiben Sie einen Gästebucheintrag für Joker15

Beiträge: 22
Registriert: 09.06.2015

SolidWorks 2013

erstellt am: 01. Feb. 2018 11:29    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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

Anzeige.:

Anzeige: (Infos zum Werbeplatz >>)

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen

nächster neuerer Beitrag | nächster älterer Beitrag
Antwort erstellen


Diesen Beitrag mit Lesezeichen versehen ... | Nach anderen Beiträgen suchen | CAD.de-Newsletter

Administrative Optionen: Beitrag schliessen | Archivieren/Bewegen | Beitrag melden!

Fragen und Anregungen: Kritik-Forum | Neues aus der Community: Community-Forum

(c)2024 CAD.de | Impressum | Datenschutz