Autor
|
Thema: Mit Makro Parameter ändern (8593 mal gelesen)
|
nreim1 Mitglied Konstrukteur
Beiträge: 36 Registriert: 18.01.2008
|
erstellt am: 07. Feb. 2008 10:09 <-- editieren / zitieren --> Unities abgeben:
Hallo Forum Besucher Ich habe ein Problem beim erstellen eines Makros für CATIA V5 .. Es geht um Folgende problemlösung In einem Assembly befinden sich Unterprodukte und unter diesen Produkten befinden sich wiederrum Parts Struktur Abbildung: HAUPTPRODUKT | - UNTERPRODUKT | |- UNTERPRODUKT | |-PART | |-PART | |-PART | - UNTERPRODUKT | |-PART | |-PART | |-PART ..... usw. Inerhalt der Einzelnen PARTS befindet sich ein Parameter den ich Mit hilfe eines Macros in ALLEN Parts des Assemblys auf einen bestimten Wert setzen möchte ( ALLE DEN SELBEN WERT NATÜRLICH ) ... Da ich noch nicht der Beste ( Anfänger ) in Macroprogrammierung bin möchte ich euch gerne um eine Hilfestellung bitten !!!??? Ich habe zwar eine Vorstellung wie das laufen könnte aber keine Idee wie ich das umsetzen könnte ... Ich wäre euch echt Dankbar um Mithilfe... PS: Im Screenshot ist eine Veranschaulichung wie das Assembly Aufgebaut ist und wo die Besagten Parameter stehen ... VIELEN DANK IM VORRAUS
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
flomator Mitglied BA-Student
Beiträge: 41 Registriert: 27.06.2007
|
erstellt am: 07. Feb. 2008 14:42 <-- editieren / zitieren --> Unities abgeben: Nur für nreim1
hi, ich bin zwar auch blutiger anfänger was macroprogrammierung angeht, hätte dir allerdings ein tipp wie du zumindest die parameter finden kannst, hoffe das hilft dir weiter: ----------------------------------------------- Sub CATMain() Dim Liste As Selection Set liste = CATIA.ActiveDocument.Selection liste.Clear liste.Search ".parameter.Name=Abstand*;Alle" End Sub ------------------------------------------------ gruß flo Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
jkaestle Mitglied
Beiträge: 1091 Registriert: 08.02.2002
|
erstellt am: 07. Feb. 2008 16:01 <-- editieren / zitieren --> Unities abgeben: Nur für nreim1
|
nreim1 Mitglied Konstrukteur
Beiträge: 36 Registriert: 18.01.2008
|
erstellt am: 08. Feb. 2008 08:40 <-- editieren / zitieren --> Unities abgeben:
Hallo Ihr Alle Also ich habe bis heute noch ein bisschen an meinem makro gearbeitet und mir auch eure Tips angesehen ! @jkaestle Deine Links haben mich auch auf ein paar ideen gebracht, Danke dafür Ich habe das Makro auch erfolgreich zum Laufen gebracht, habe aber noch ein paar Stolpersteine drin wobei ihr mir hier villeicht noch helfen könntet !!! Mein Makro läuft also erfolgreich durch die ganze Struktur und ändert mir auch brav meine Parameter. Jetzt kommt es aber zu einem Problem was ich vorher noch nicht bedacht habe. Manche Parameter die ich ändern möchte sind irgendwann wärend der Konstruktionsphase mit einer Rule belegt worden, das hat den Effekt das mein Makro sich genau bei diesen Parametern mit einer Fehlermeldung verabschiedet. Nun kann man zwar einfach mit dem Befehl "On Error Resume Next" Das Makro weiterlaufen lassen, aber besagte Parameter werden dabei einfach übersprungen. Jetzt bin ich nicht der Fan davon die Rules einfach löschen zu lassen sondern möchte eher folgende möglichkeiten haben 1. Entweder das Makro Zeigt bei besagtem Parameter eine Meldung an die Lautet PARAMETER ind Part xxxxxxxxxx konnte nicht geändert werden, Bitte prüfen ! und dann soll das Makro beendet werden.. 2. Was mir Persönlich besser gefallen würde wäre daß das Makro weiter durchläuft " On Error ... " mir aber am ende eine Meldung anzeigen würde bei welchen Parts es zu Problemen gekommen ist. So eine Art Liste mit Partnummern o.ä. Sieht hier jemand eine möglichkeit das umzusetzen ???!!! PS: Am Ende werde ich das Makro hier rein Posten damit das ganze auch Drüchte trägt .... Mfg: Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bgrittmann Moderator Konstrukteur
Beiträge: 11780 Registriert: 30.11.2006 CATIA V5R19
|
erstellt am: 08. Feb. 2008 09:11 <-- editieren / zitieren --> Unities abgeben: Nur für nreim1
Servus Meine Idee zur Ausgabe der "Fehlermeldung": - Am Anfnag eine Variable (String) erzeugen (ggf als global definieren): Dim Fehler as String - beim Auftauchen des Fehlers: on error Fehler = Fehler & Partname & Chr(13) & Chr(10) next - Am Ende des Macros, Meldung ausgeben: MsgBox Fehler Gruß Bernd
------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
nreim1 Mitglied Konstrukteur
Beiträge: 36 Registriert: 18.01.2008
|
erstellt am: 08. Feb. 2008 09:32 <-- editieren / zitieren --> Unities abgeben:
Hallo bgrittmann Leider Funktioniert dein Beispiel so nicht ganz da ich eine For Next Schleife durchlaufe und dabei mehrere Fehler auftauchen... Oder ich habe bei der umsetzung deiner Idee einen fehler gemacht ... evtl. könntest du es ja mal anders Definieren ... Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bgrittmann Moderator Konstrukteur
Beiträge: 11780 Registriert: 30.11.2006 CATIA V5R19
|
erstellt am: 08. Feb. 2008 09:55 <-- editieren / zitieren --> Unities abgeben: Nur für nreim1
Servus Du müsstest den Code "On error .." in der for-Next-Schleife (beim ändern des Parameters) einbauen. Dabei sollte das "On error resume next" einfach ersetzt werden. Gruß Bernd ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
nreim1 Mitglied Konstrukteur
Beiträge: 36 Registriert: 18.01.2008
|
erstellt am: 08. Feb. 2008 10:10 <-- editieren / zitieren --> Unities abgeben:
Hi Bernd Das habe ich ja auch versucht, das Problem dabei ist aber das CATIA bzw. das Skript sofort nen fehler usgibt sobals ich on error Fehler = Fehler & Partname & Chr(13) & Chr(10) next In meinen Code einfüge ... Siehe Screenshot CATScript kennt den befehl on error ( ohne Resume Next oder GoTo ) nicht Mfg: Nico Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Proofin Mitglied Dpl.Ing
Beiträge: 208 Registriert: 24.11.2004
|
erstellt am: 08. Feb. 2008 11:13 <-- editieren / zitieren --> Unities abgeben: Nur für nreim1
Moin Nico, es wäre eventuell einfacher, wenn du die entsprechende Codestelle posten würdest aber versuch es mal wie folgt: on error resume next for .... err.clear 'tut irgendwas if err.number <> 0 Fehler = Fehler & Partname & Chr(13) & Chr(10) end if next ' ausgabe von Fehler Gruß Proofin Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
nreim1 Mitglied Konstrukteur
Beiträge: 36 Registriert: 18.01.2008
|
erstellt am: 08. Feb. 2008 12:18 <-- editieren / zitieren --> Unities abgeben:
Hi Alle zusammen... Also hier mal Der Quelllcode Momentander stand: Makro läft sauber duch die Struktur und Überspringt einfach die Fehler !!! Das Soll aber nicht sinn der sache sein, also für am sinnvollsten halte ich das wenn Das Makro Komplett durch die Struktur Läuft mir aber bei jedem Fehler eine MessageBox bringt mir dem Part bzw. instance Namen und nach dem Klick auf OK Trozdem das Skript weiter ausführt ... Könntet ihr mir dabei bitte noch behilflich sein ?! Code:
Sub CATMain()
Dim myproduct As Product Set myproduct = CATIA.ActiveDocument.Product ' Scannen der Produktstruktur Beginnen ScanProductStructure myproduct
MsgBox "Reset all Parameters Done" End Sub Sub ScanProductStructure(myproduct2 As Product) ' aus myproduct wird myproduct3
Dim currentprod As Product On Error resume next For i = 1 To myproduct2.Products.Count Set currentprod = myproduct2.Products.Item(i) If currentprod.Products.Count = 0 Then currentprod.Parameters.Item("STOCKLIST\CHANGE_ID").Value = 0 currentprod.Parameters.Item("STOCKLIST\CHANGE_STATUS").Value = "" Else: ScanProductStructure currentprod.ReferenceProduct End If Next
End Sub
Vielen Dank Nochmal für eure Hilfestellungen Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Proofin Mitglied Dpl.Ing
Beiträge: 208 Registriert: 24.11.2004
|
erstellt am: 08. Feb. 2008 13:49 <-- editieren / zitieren --> Unities abgeben: Nur für nreim1
Ich würde es so machen: Code:
Sub ScanProductStructure(myproduct2 As Product) ' aus myproduct wird myproduct3Dim currentprod As Product Dim ii As Integer On Error Resume Next For ii = 1 To myproduct2.Products.Count Set currentprod = myproduct2.Products.Item(ii) If currentprod.Products.Count = 0 Then Err.Clear currentprod.Parameters.Item("STOCKLIST\CHANGE_ID").Value = 0 currentprod.Parameters.Item("STOCKLIST\CHANGE_STATUS").Value = "" If Err.Number <> 0 Then MsgBox "Fehler in: " & currentprod.Name, vbOK End If Else ScanProductStructure currentprod.ReferenceProduct End If Next On Error GoTo 0 End Sub
Gruß Proofin Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bgrittmann Moderator Konstrukteur
Beiträge: 11780 Registriert: 30.11.2006 CATIA V5R19
|
erstellt am: 08. Feb. 2008 17:48 <-- editieren / zitieren --> Unities abgeben: Nur für nreim1
|
nreim1 Mitglied Konstrukteur
Beiträge: 36 Registriert: 18.01.2008
|
erstellt am: 11. Feb. 2008 07:44 <-- editieren / zitieren --> Unities abgeben:
@ Proofin SUPER .... Das hat einwandfrei Funktioniert .... Also hier zur Zusammenfassung das Komplette Makro, damit sich eure Mühen auch gelohnt haben und der Sinn eines Forums bestehen bleibt .... Was kann das Makro: Es Durchläuft eine Komplette Assembly ( Also sämtliche Produkte und Parts ) und ändert Diverse Parameter .... Ist zwar kein Revolutionäres Skript, aber vieleicht sucht ja jemand soetwas.... Code:
Sub CATMain() Dim myproduct As Product Set myproduct = CATIA.ActiveDocument.Product ' Launch the scan of the complete product structure ScanProductStructure myproduct
MsgBox "Reset all Parameters Done"
End Sub Sub ScanProductStructure(myproduct2 As Product) ' aus myproduct wird myproduct3 Dim currentprod As Product Dim ii As Integer On Error Resume Next For ii = 1 To myproduct2.Products.Count Set currentprod = myproduct2.Products.Item(ii) If currentprod.Products.Count = 0 Then Err.Clear currentprod.Parameters.Item("STOCKLIST\CHANGE_ID").Value = 0 currentprod.Parameters.Item("STOCKLIST\CHANGE_STATUS").Value = "" If Err.Number <> 0 Then MsgBox "Fehler in: " & currentprod.Name, vbOK End If Else ScanProductStructure currentprod.ReferenceProduct End If Next On Error GoTo 0 End Sub
PS: Für alle fleissigen Helferlein Natürlich 10 Punkte alleine schon weil ihr euch mühe gegeben habt ...
Mfg: Bis Später
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
flomator Mitglied BA-Student
Beiträge: 41 Registriert: 27.06.2007
|
erstellt am: 12. Feb. 2008 11:01 <-- editieren / zitieren --> Unities abgeben: Nur für nreim1
hi ihr, ich habe einen gleichen aufbau der product_struktur wie nreim1. die einzelnen parts und products sind mit rules verknüpft. nun möchte ich dass mir ein makro alle rules, die in der konstruktion vorkommen löscht. kann mir da jemand weiterhelfen?? bei der programmierung erkennt er mir "rule" nicht!! komme nicht voran. danke schon mal im voraus für euer bemühen. grüße Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Happykleiner Mitglied Maschinenbautechniker
Beiträge: 6 Registriert: 10.09.2007 MS Windows 7 Professional 64Bit CATIA V5 R19 SP9 HF40
|
erstellt am: 27. Mai. 2010 20:15 <-- editieren / zitieren --> Unities abgeben: Nur für nreim1
Das Makro greift leider nicht aus Parameter zu, die direkt unter einem Produkt stehen. Was müsste man ändern, damit dies auch noch geht? (Für Neugierige: Ich muss in mehreren Anlagen jedem enthaltenen Part und Produkt einen Parameter mit der selben Projektnummer verpassen. Da ich die Info erst gegen Projektende erhalten habe, stand das nun leider nicht in meinen Startmodellen und ein einzelnes Durchklicken wäre sehr aufwendig.) Danke für die Hilfe. ------------------ Ich weiß nicht ob es besser wird, wenn es anders wird. Ich weiß nur, dass es anders werden muss, wenn es besser werden soll... [Diese Nachricht wurde von Happykleiner am 29. Mai. 2010 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |