Autor
|
Thema: Properties hinzufügen für bestimmte Parts in einem Produkt (2479 mal gelesen)
|
Dennis030186 Mitglied Design Engineer
Beiträge: 121 Registriert: 19.01.2007 NX 5,6,7 ; CATIA V5 R-21
|
erstellt am: 06. Jan. 2014 12:04 <-- editieren / zitieren --> Unities abgeben:
Hallo liebe CADler, ich habe ein Problem bezüglich der Programmierung in CATIA. Ich habe ziemlich große Produkte und dort sind in den Parts teilweise Publications vorhanden, deren Benennung EHISUPPORT-RefPoint... lautet. Für jedes Part was solch eine Publication besitzt möchte ich dem Part einmal eine userdefined property real und einmal string hinzufügen. Das Hinzufügen klappt zwar, aber ich weiß nicht, wie der Quelltext dann lautet um zu suchen ob in einem Part EHISUPPORT auftaucht und wenn ja in diesem Part die Property hinzugefügt werden soll, falls diese noch nicht dort vorhanden ist. Ich hoffe die Problematik ist verständlich. Für eure Hilfe wäre ich sehr dankbar. 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: 06. Jan. 2014 12:23 <-- editieren / zitieren --> Unities abgeben: Nur für Dennis030186
Servus Zur Suche der entsprechenden Parts gibt es folgende Möglichkeiten: - Schleife über alle geöffneten Dokumente und dort die entsprechende Veröffentlichung suchen (Unterbaugruppen und parallel geöffnete Baugruppen/Parts sind auch betroffen) - Suche in der Baugruppe nach der Veröffentlichung und sich zum entsprechenden Part hoch-hangeln (auch Unterbaugruppen betroffen) - Schleife über alle Products der Baugruppe und dort die entsprechende Veröffentlichung suchen (Unterbaugruppen nur betroffen wenn das AMkro rekursiv aufgebaut ist) Um den Parameter anzusprechen könntest du diese Funktion verwenden. Diese könntest du noch entsprechend ausbauen, dass falls der Parameter nicht vorhanden ist dieser erstellt wird. Gruß Bernd
------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
RSchulz Moderator² Head of CAD, Content & Collaboration / IT-Manager
Beiträge: 5541 Registriert: 12.04.2007 @Work Lenovo P510 Xeon E5-1630v4 64GB DDR4 Quadro P2000 256GB PCIe SSD 512GB SSD SmarTeam V5-6 R2016 Sp04 CATIA V5-6 R2016 Sp05 E3.Series V2019 Altium Designer/Concord 19 Win 10 Pro x64
|
erstellt am: 06. Jan. 2014 12:30 <-- editieren / zitieren --> Unities abgeben: Nur für Dennis030186
Hallo Dennis, hier mal ein Beispiel zum finden der Publication... Code:
Sub Example_FindPublication() Dim MainPRD As Product Dim tmpnode As Product Dim TmpPubs As Publications Dim TmpPub As Publication Dim i As Integer Set MainPRD = CATIA.ActiveDocument.Product For Each tmpnode In MainPRD.Products Set TmpPubs = Nothing Set TmpPubs = tmpnode.Publications If TmpPubs.Count > 0 Then For i = 1 To TmpPubs.Count Set TmpPub = TmpPubs.Item(i) If TmpPub.Name = "EHISUPPORT-RefPoint" Then MsgBox tmpnode.Name End If Next End If Next End Sub
------------------ MFG Rick Schulz Nettiquette (CAD.de) - Was ist die Systeminfo? - Wie man Fragen richtig stellt. - Unities
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Dennis030186 Mitglied Design Engineer
Beiträge: 121 Registriert: 19.01.2007 NX 5,6,7 ; CATIA V5 R-21
|
erstellt am: 06. Jan. 2014 12:45 <-- editieren / zitieren --> Unities abgeben:
Hallo, danke erstmal für die schnellen Antworten. Ich muss dazu sagen ich bin nicht sehr versiert was Programmierung angeht. Ich habe den Quelltext jetzt eingebunden und mal laufen lassen. Man kann da jetzt so natürlich noch nichts sehen. Wie ist das denn weil nach Refplane kommen ja immer unterschiedliche Endungen wie 1 oder 1.1 etc. Mit dem Durchlaufen wie die Suche laufen sollte ist mir vom Prinzip her klar, bei mir harperts am Ende einfach an der Umsetzung. Vielleicht habt Ihr ja eine einfache recht schnelle Lösung wie der Quelltext dazu aussehen könnte? Danke in jedem Fall für eure Hilfe. [Diese Nachricht wurde von Dennis030186 am 06. Jan. 2014 editiert.] 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: 06. Jan. 2014 12:49 <-- editieren / zitieren --> Unities abgeben: Nur für Dennis030186
Servus Dann musst du beim Vergleich der Stings noch angeben, dass nur die ersten X Zeichen verglichen werden sollen. zB (ungetestet): Code: If left(TmpPub.Name, Len("EHISUPPORT-RefPoint"))= "EHISUPPORT-RefPoint" Then
Gruß Bernd ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
RSchulz Moderator² Head of CAD, Content & Collaboration / IT-Manager
Beiträge: 5541 Registriert: 12.04.2007 @Work Lenovo P510 Xeon E5-1630v4 64GB DDR4 Quadro P2000 256GB PCIe SSD 512GB SSD SmarTeam V5-6 R2016 Sp04 CATIA V5-6 R2016 Sp05 E3.Series V2019 Altium Designer/Concord 19 Win 10 Pro x64
|
erstellt am: 06. Jan. 2014 12:52 <-- editieren / zitieren --> Unities abgeben: Nur für Dennis030186
Zitat: Original erstellt von Dennis030186: Wie is das denn weil nach Refplane kommen ja immer unterschiedliche Endungen wie 1 oder 1.1 etc.
Code:
Sub Example_FindPublication() Dim MainPRD As Product Dim tmpnode As Product Dim TmpPubs As Publications Dim TmpPub As Publication Dim i As Integer Set MainPRD = CATIA.ActiveDocument.Product For Each tmpnode In MainPRD.Products Set TmpPubs = Nothing Set TmpPubs = tmpnode.Publications If TmpPubs.Count > 0 Then For i = 1 To TmpPubs.Count Set TmpPub = TmpPubs.Item(i) If instr(TmpPub.Name, "EHISUPPORT-RefPoint") > 0 Then MsgBox tmpnode.Name End If Next End If Next End Sub
Also ganz im Ernst ein fertiges Script wird dir niemand liefern können, da musst du schon selbst hand anlegen oder einen Dienstleister beauftrage. Bei den Beispielen oder der Hilfe wäre natürlich eine klare Anforderung nicht schlecht, denn ein "..." definiert für mich nicht automatisch eine Nummerierung. Wie auch immer, wird dir kein Beispiel ausreichen, wenn du nicht zumindest etwas programmieren kannst. ------------------ MFG Rick Schulz Nettiquette (CAD.de) - Was ist die Systeminfo? - Wie man Fragen richtig stellt. - Unities
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Dennis030186 Mitglied Design Engineer
Beiträge: 121 Registriert: 19.01.2007 NX 5,6,7 ; CATIA V5 R-21
|
erstellt am: 06. Jan. 2014 15:24 <-- editieren / zitieren --> Unities abgeben:
Hallo RSchulz, dass keiner ein angepasstes Skript mir geben kann ist mir bewusst. Deswegen meinte ich ja ob vielleicht jemand eine Lösung zufällig schon parat hat, für einn anderen Fall, jedoch ungefähr anwendbar auf meine Problematik. Ich werde mich weiter an der Einbindung eurer Vorschläge versuchen. Für weiteren Input bin ich euch sehr dankbar. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
RSchulz Moderator² Head of CAD, Content & Collaboration / IT-Manager
Beiträge: 5541 Registriert: 12.04.2007 @Work Lenovo P510 Xeon E5-1630v4 64GB DDR4 Quadro P2000 256GB PCIe SSD 512GB SSD SmarTeam V5-6 R2016 Sp04 CATIA V5-6 R2016 Sp05 E3.Series V2019 Altium Designer/Concord 19 Win 10 Pro x64
|
erstellt am: 06. Jan. 2014 15:40 <-- editieren / zitieren --> Unities abgeben: Nur für Dennis030186
Zitat: Original erstellt von Dennis030186: Hallo RSchulz,dass keiner ein angepasstes Skript mir geben kann ist mir bewusst. Deswegen meinte ich ja ob vielleicht jemand eine Lösung zufällig schon parat hat, für einn anderen Fall, jedoch ungefähr anwendbar auf meine Problematik. Ich werde mich weiter an der Einbindung eurer Vorschläge versuchen. Für weiteren Input bin ich euch sehr dankbar.
Ja sry hat sich aber so angehört und dargestellt. Minimaler Aufwand maximales Ergebnis und am Besten arbeiten die anderen für einen nichts für ungut, aber im Moment häuft sich dieses Verhalten leider etwas. Wir helfen gerne weiter, aber wenigstens die Anforderung oder das Problem sollten deutlich benannt werden. Wenn du Fragen hast oder konkrete Anliegen, meld dich ruhig ein bisschen Beispielcode kann ich dir sicherlich zusammenbasteln. ------------------ MFG Rick Schulz Nettiquette (CAD.de) - Was ist die Systeminfo? - Wie man Fragen richtig stellt. - Unities
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Dennis030186 Mitglied Design Engineer
Beiträge: 121 Registriert: 19.01.2007 NX 5,6,7 ; CATIA V5 R-21
|
erstellt am: 07. Jan. 2014 09:31 <-- editieren / zitieren --> Unities abgeben:
Hallo RSchulz, ja das stimmt, das ist oft so mit dem minimalen Aufwand maximaler Ertrag. Das war jedenfalls nicht so beabsichtigt Also mein Code den ich erstellt habe, kann properties zwar hinzufügen in einem Produkt, aber ich gehe in diesem Fall über die normale Suche. Das ist zu aufwändig und erschwert das ganze Problem eigentlich nur zusätzlich. Der zuvor gepostete Code ist finde ich ein super Ansatz. Dort habe ich das Ganze jedoch so umgestellt, dass mir nicht der Name ausgegeben wird, sondern jetzt die Partnummer, da darauf referenziert wird. Jetzt versuche ich den Code einzubinden, jedoch funktioniert es nicht so wie ich erhofft hatte. Mit dem Code, wenn ich explizit die PN angebe klappt es, jedoch weiß ich nun nicht wie ich allgemein auf die Partnummern referenziere, dass dort eine Verallgemeinerung stattfindet. Ich poste hier mal den derzeitigen Code: Sub Example_FindPublication() Dim MainPRD As Product Dim tmpnode As Product Dim TmpPubs As Publications Dim TmpPub As Publication Dim i As Integer Set MainPRD = CATIA.ActiveDocument.Product For Each tmpnode In MainPRD.Products Set TmpPubs = Nothing Set TmpPubs = tmpnode.Publications If TmpPubs.Count > 0 Then For i = 1 To TmpPubs.Count Set TmpPub = TmpPubs.Item(i) 'If TmpPub.Name = "EHISUPPORT-RefPoint" Then 'nur die ersten X Zeichen verglichen werden sollen. zB (ungetestet): If Left(TmpPub.Name, Len("EHISUPPORT-RefPoint")) = "EHISUPPORT-RefPoint" Then MsgBox tmpnode.PartNumber 'MsgBox tmpnode.Name 'HIER MÜSSTE NUN EINPROGRAMMIERT WERDEN, DASS SICH HOCHGEARBEITET WERDEN SOLLZU DEM JEWEILIGEN PART UND DORT DIE PROPERTY VERÄNDERT WERDEN SOLL, FAAALLLS DIE PROPERTY NOCH NICHT EXISTIERT!!! Dim productDocument1 As Selection 'Set productDocument1 = CATIA.ActiveDocument.Selection 'productDocument1.Search "Name=*EHISUPPORT'-'RefPlane*,all" Dim documents1 As Documents Set documents1 = CATIA.Documents Dim partDocument1 As PartDocument Set partDocument1 = documents1.Item("1928560-83 2.CATPart") Dim product1 As Product Set product1 = partDocument1.GetItem("1928560-83") Set product1 = product1.ReferenceProduct Dim parameters1 As Parameters Set parameters1 = product1.UserRefProperties Dim realParam1 As RealParam Set realParam1 = parameters1.CreateReal("MEINE_PROPERTY", 0#) realParam1.ValuateFromString "0" End If Next End If Next End Sub Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
RSchulz Moderator² Head of CAD, Content & Collaboration / IT-Manager
Beiträge: 5541 Registriert: 12.04.2007 @Work Lenovo P510 Xeon E5-1630v4 64GB DDR4 Quadro P2000 256GB PCIe SSD 512GB SSD SmarTeam V5-6 R2016 Sp04 CATIA V5-6 R2016 Sp05 E3.Series V2019 Altium Designer/Concord 19 Win 10 Pro x64
|
erstellt am: 07. Jan. 2014 13:31 <-- editieren / zitieren --> Unities abgeben: Nur für Dennis030186
Hallo Dennis, du darfst mich ruhig Rick nennen... Wenn ich dich richtig verstanden habe, müsste es so ungefähr passen. Code:
Sub Example_CreateReal() Dim oMainPRD As Product Dim oNode As Product Dim oPubs As Publications Dim oPub As Publication Dim oParams As Parameters Dim oParam As Parameter Dim oParamReal As RealParam Dim bFoundP As Boolean Dim strParamName As String Dim i As Integer Set oMainPRD = CATIA.ActiveDocument.Product strParamName = "MEINE_PROPERTY" 'Schleife läuft über jeden Produktknoten im geöffneten Produkt For Each oNode In oMainPRD.Products bFoundP = False Set oPubs = Nothing Set oPubs = oNode.Publications 'Wenn Veröffentlichungen vorhanden sind prüfen If oPubs.Count > 0 Then 'Schleife läuft über jede gefundene Veröffentlichung For i = 1 To oPubs.Count Set oPub = oPubs.Item(i) 'Wenn die benannte Veröffentlichung gefunden wurde If InStr(oPub.Name, "EHISUPPORT-RefPoint") > 0 Then Set oParams = oNode.ReferenceProduct.UserRefProperties 'Prüfe jeden Parameter in den vorhanden Parametern des Teils For Each oParam In oParams 'Wenn der definierte Paramerter gefunden wird, keine weitere Verarbeitung If Right(oParam.Name, Len(strParamName)) = strParamName Then bFoundP = True Exit For End If Next 'Wenn kein entsprechender Parameter gefunden wurde, soll dieser erzeugt werden If bFoundP = False Then Set oParamReal = oParams.CreateReal(strParamName, 0#) oParamReal.ValuateFromString "0" End If End If Next End If Next End Sub
------------------ MFG Rick Schulz Nettiquette (CAD.de) - Was ist die Systeminfo? - Wie man Fragen richtig stellt. - Unities
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Dennis030186 Mitglied Design Engineer
Beiträge: 121 Registriert: 19.01.2007 NX 5,6,7 ; CATIA V5 R-21
|
erstellt am: 08. Jan. 2014 09:20 <-- editieren / zitieren --> Unities abgeben:
Servus Rick also ich habe Deinen Code gerade nur mal kurz getestet und es schien super zu funktionieren. Werde mich jetzt damit weiter befassen. Was aber heute plötzlich auftrat, bei dem Code den ich gestern gepostet hatte, kam bei Set product1 = documents1.GetItem("813936") die Fehlermeldung Object doesn´t support this action. Das war gestern seltsamerweise nicht und lief einwandfrei?! Edit: Mein Fehler... ich hatte den Kommentar 'Set productDocument1 = CATIA.ActiveDocument.Selection wieder aktiv geschaltet, daher das Problem. [Diese Nachricht wurde von Dennis030186 am 08. Jan. 2014 editiert.] 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. Jan. 2014 09:27 <-- editieren / zitieren --> Unities abgeben: Nur für Dennis030186
Servus Ist "documents1" deklariert und zugewiesen? Gibt es das Dokument "813936". IMHO ist das GetItem umständlich. Rick hat einen einfach Weg gezeigt vom Product auf das Dokument bzw Part zu kommen. Gruß Bernd PS: Ich benutze fast nie GetItem, da ich nie genau weiß was zurückgeliefert wird. ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Dennis030186 Mitglied Design Engineer
Beiträge: 121 Registriert: 19.01.2007 NX 5,6,7 ; CATIA V5 R-21
|
erstellt am: 08. Jan. 2014 11:54 <-- editieren / zitieren --> Unities abgeben:
Hallöchen, wozu dient denn getitem genau? Habe leider die Catia Hilfe noch nicht installiert. In der Tat ist der Weg von Rick einfacher. Hier folgt der aktuell angepasste Code. Jetzt habe ich aber das Problem, dass es bei einem produkt mit enthaltenen Teilen ohne Probleme funktioniert >Produkt |-Part |-Part Aber bei solchen Strukturen tut sich nichts: >Produkt |-Produkt | |-Part |-Produkt |-Produkt |-Part |-Part . . . Ich kenne den Weg hierzu nicht wie ich nun sagen kann, suche nicht nur in den Knoten des einen Produktes sondern gehe durch alle Knoten die es gibt?! Sub Example_CreateReal() Dim oMainPRD As Product Dim oNode As Product Dim oPubs As Publications Dim oPub As Publication Dim oParams As Parameters Dim oParam As Parameter Dim oParamString As StrParam Dim bFoundP As Boolean Dim strParamName As String Dim lenParamName As String Dim i As Integer '----------------------------------------------------------------------------------------------- 'Ausgabe der PNs, welche EHISUPPORT enthalten Dim MainPRD As Product Dim tmpnode As Product Dim TmpPubs As Publications Dim TmpPub As Publication Dim z As Integer Set MainPRD = CATIA.ActiveDocument.Product For Each tmpnode In MainPRD.Products Set TmpPubs = Nothing Set TmpPubs = tmpnode.Publications If TmpPubs.Count > 0 Then For z = 1 To TmpPubs.Count Set TmpPub = TmpPubs.Item(z) 'If TmpPub.Name = "EHISUPPORT-RefPoint" Then 'nur die ersten X Zeichen verglichen werden sollen. zB (ungetestet): If Left(TmpPub.Name, Len("EHISUPPORT-RefPlane")) = "EHISUPPORT-RefPlane" Then MsgBox tmpnode.PartNumber End If Next End If Next '------------------------------------------------------------------------------------------------- Set oMainPRD = CATIA.ActiveDocument.Product strParamName = "CHSFixingType" lenParamName = "CHSFixingLength" 'Schleife läuft über jeden Produktknoten im geöffneten Produkt For Each oNode In oMainPRD.Products bFoundP = False Set oPubs = Nothing Set oPubs = oNode.Publications 'Wenn Veröffentlichungen vorhanden sind prüfen If oPubs.Count > 0 Then 'Schleife läuft über jede gefundene Veröffentlichung For i = 1 To oPubs.Count Set oPub = oPubs.Item(i) 'Wenn die benannte Veröffentlichung gefunden wurde If InStr(oPub.Name, "EHISUPPORT-RefPoint") > 0 Then Set oParams = oNode.ReferenceProduct.UserRefProperties 'Prüfe jeden Parameter in den vorhanden Parametern des Teils For Each oParam In oParams 'Wenn der definierte Paramerter (CHSFixingType) gefunden wird, keine weitere Verarbeitung If Right(oParam.Name, Len(strParamName)) = strParamName Then bFoundP = True Exit For End If Next 'Wenn kein entsprechender Parameter (CHSFixingType) gefunden wurde, soll dieser erzeugt werden If bFoundP = False Then Set oParamString = oParams.CreateString(strParamName, 0#) oParamString.ValuateFromString "TEILBEZEICHNUNG" End If 'Prüfe jeden Parameter in den vorhanden Parametern des Teils For Each oParam In oParams 'Wenn der definierte Paramerter (CHSFixingLength) gefunden wird, keine weitere Verarbeitung If Right(oParam.Name, Len(lenParamName)) = lenParamName Then bFoundP = True Exit For End If Next 'Wenn kein entsprechender Parameter (CHSFixingLength) gefunden wurde, soll dieser erzeugt werden If bFoundP = False Then Set oParamString = oParams.CreateString(lenParamName, 0#) oParamString.ValuateFromString "0mm" End If End If Next End If Next End Sub
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. Jan. 2014 11:57 <-- editieren / zitieren --> Unities abgeben: Nur für Dennis030186
Servus Dazu musst du das Makro rekursiv aufbauen (das Makro ruft sich selbst wieder für die Unterbaugruppe auf). Bitte im Forum mal danach suchen. Gruß Bernd ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
RSchulz Moderator² Head of CAD, Content & Collaboration / IT-Manager
Beiträge: 5541 Registriert: 12.04.2007 @Work Lenovo P510 Xeon E5-1630v4 64GB DDR4 Quadro P2000 256GB PCIe SSD 512GB SSD SmarTeam V5-6 R2016 Sp04 CATIA V5-6 R2016 Sp05 E3.Series V2019 Altium Designer/Concord 19 Win 10 Pro x64
|
erstellt am: 08. Jan. 2014 12:28 <-- editieren / zitieren --> Unities abgeben: Nur für Dennis030186
|
Dennis030186 Mitglied Design Engineer
Beiträge: 121 Registriert: 19.01.2007 NX 5,6,7 ; CATIA V5 R-21
|
erstellt am: 08. Jan. 2014 13:48 <-- editieren / zitieren --> Unities abgeben:
|
RSchulz Moderator² Head of CAD, Content & Collaboration / IT-Manager
Beiträge: 5541 Registriert: 12.04.2007 @Work Lenovo P510 Xeon E5-1630v4 64GB DDR4 Quadro P2000 256GB PCIe SSD 512GB SSD SmarTeam V5-6 R2016 Sp04 CATIA V5-6 R2016 Sp05 E3.Series V2019 Altium Designer/Concord 19 Win 10 Pro x64
|
erstellt am: 08. Jan. 2014 18:22 <-- editieren / zitieren --> Unities abgeben: Nur für Dennis030186
Dafür habe ich einen gut... Code:
Sub CATMain() Dim oMainPRD As Product Dim strParamName As String Set oMainPRD = CATIA.ActiveDocument.Product strParamName = "MEINE_PROPERTY" Call CreateReal(oMainPRD, strParamName) End Sub Sub CreateReal(ByVal oMainPRD As Product, ByVal strParamName As String) Dim oNode As Product Dim oPubs As Publications Dim oPub As Publication Dim oParams As Parameters Dim oParam As Parameter Dim oParamReal As RealParam Dim bFoundP As Boolean Dim i As Integer Dim j As Integer 'Schleife läuft über jeden Produktknoten im geöffneten Produkt For Each oNode In oMainPRD.Products 'Wenn der Produktknoten keine Kinder enthält If oNode.Products.Count = 0 Then bFoundP = False Set oPubs = Nothing Set oPubs = oNode.Publications 'Wenn Veröffentlichungen vorhanden sind prüfen If oPubs.Count > 0 Then 'Schleife läuft über jede gefundene Veröffentlichung For i = 1 To oPubs.Count Set oPub = oPubs.Item(i) 'Wenn die benannte Veröffentlichung gefunden wurde If InStr(oPub.Name, "EHISUPPORT-RefPoint") > 0 Then Set oParams = oNode.ReferenceProduct.UserRefProperties 'Prüfe jeden Parameter in den vorhanden Parametern des Teils For Each oParam In oParams 'Wenn der definierte Paramerter gefunden wird, keine weitere Verarbeitung If Right(oParam.Name, Len(strParamName)) = strParamName Then bFoundP = True Exit For End If Next 'Wenn kein entsprechender Parameter gefunden wird, soll dieser erzeugt werden If bFoundP = False Then Set oParamReal = oParams.CreateReal(strParamName, 0#) oParamReal.ValuateFromString "0" End If End If Next End If 'Wenn der Produktknoten Kinder enthält Else 'Rufe die Prozedur neu auf mit dem Unterprodukt Call CreateReal(oNode, strParamName) End If Next End Sub
------------------ MFG Rick Schulz Nettiquette (CAD.de) - Was ist die Systeminfo? - Wie man Fragen richtig stellt. - Unities
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Dennis030186 Mitglied Design Engineer
Beiträge: 121 Registriert: 19.01.2007 NX 5,6,7 ; CATIA V5 R-21
|
erstellt am: 09. Jan. 2014 08:43 <-- editieren / zitieren --> Unities abgeben:
Guten Morgen Rick, vielen herzlcihen Dank für Deine Hilfe. Ich habe den Code nun angepasst. Was mir aber noch bei mir jetzt aufgefallen ist, ist dass Fixingtype keine richtige Länge ist sondern ein String obwohl ich ganz oben gesagt habe oParam Length as length, jedoch im folgenden Abschnitt gesagt wird Create String?! CreateDimension oder Integer bringt mich auch nicht ans Ziel. Wenn ich einen Längenparameter manuell erzeuge steht immer mm im Feld, auch wenn alles herausgelöscht wird aus der Zelle. Erstelle ich Ihn per Makro, steht genau dort dann nichts mehr drinnen sobald ich die Zelle leere. Wo liegt hier der Fehler? 'Wenn kein entsprechender Parameter (CHSFixingLength) gefunden wurde, soll dieser erzeugt werden If bFoundP = False Then Set oParamLength = oParams.CreateString(lenParamName, 0#) oParamString.ValuateFromString "0" End If Noch ein paar allgemeinere Dinge... Wozu dient das Nothing? Set oPubs = Nothing Set oPubs = oNode.Publications und was wird dort genau gemacht? Die Anzahl der OPublikationen wird ja erst später per Count gezählt.
Gibt es eine Literatur mit der man an die Befehle und den grundsätzlichen Aufbau von Catia Makros gut herangeführt wird? Ich kenne den Ziethen und das Kochbuch, aber so wirklich herangeführt wird man in beiden Literaturen nicht, finde ich. Sub CATMain() Dim oMainPRD As Product Dim strParamName As String Dim lenParamName As String Set oMainPRD = CATIA.ActiveDocument.Product strParamName = "CHSFixingType" lenParamName = "CHSFixingLength" Call CreateString(oMainPRD, strParamName, lenParamName) End Sub
Sub CreateString(ByVal oMainPRD As Product, ByVal strParamName As String, ByVal lenParamName As String) Dim oNode As Product Dim oPubs As Publications Dim oPub As Publication Dim oParams As Parameters Dim oParam As Parameter Dim oParamString As StrParam Dim oParamLength As Length Dim bFoundP As Boolean Dim i As Integer Dim j As Integer 'Schleife läuft über jeden Produktknoten im geöffneten Produkt For Each oNode In oMainPRD.Products 'Wenn der Produktknoten keine Kinder enthält If oNode.Products.Count = 0 Then bFoundP = False Set oPubs = Nothing Set oPubs = oNode.Publications 'Wenn Veröffentlichungen vorhanden sind prüfen If oPubs.Count > 0 Then 'Schleife läuft über jede gefundene Veröffentlichung For i = 1 To oPubs.Count Set oPub = oPubs.Item(i) 'Wenn die benannte Veröffentlichung gefunden wurde If InStr(oPub.Name, "EHISUPPORT-RefPlane") > 0 Then Set oParams = oNode.ReferenceProduct.UserRefProperties 'Prüfe jeden Parameter in den vorhanden Parametern des Teils For Each oParam In oParams 'Wenn der definierte Parameter gefunden wird, keine weitere Verarbeitung If Right(oParam.Name, Len(strParamName)) = strParamName Then bFoundP = True Exit For End If Next 'Wenn kein entsprechender Parameter gefunden wird, soll dieser erzeugt werden If bFoundP = False Then Set oParamString = oParams.CreateString(strParamName, 0#) oParamString.ValuateFromString "TEILBEZEICHNUNG" End If '-------------------------- 'Prüfe jeden Parameter in den vorhanden Parametern des Teils For Each oParam In oParams 'Wenn der definierte Paramerter (CHSFixingLength) gefunden wird, keine weitere Verarbeitung If Right(oParam.Name, Len(lenParamName)) = lenParamName Then bFoundP = True Exit For End If Next 'Wenn kein entsprechender Parameter (CHSFixingLength) gefunden wurde, soll dieser erzeugt werden If bFoundP = False Then Set oParamLength = oParams.CreateString(lenParamName, 0#) oParamString.ValuateFromString "0" End If End If Next End If 'Wenn der Produktknoten Kinder enthält Else 'Rufe die Prozedur neu auf mit dem Unterprodukt Call CreateString(oNode, strParamName, lenParamName) End If Next End Sub
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: 09. Jan. 2014 08:59 <-- editieren / zitieren --> Unities abgeben: Nur für Dennis030186
Servus Versuch mal folgendes: - "Dim oParamLength As Dimension" deklarieren - Parameter mit " Set oParamLength = oParams.CreateDimension(lenParamName, "LENGTH", 0)" anlegen. Gruß Bernd ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Dennis030186 Mitglied Design Engineer
Beiträge: 121 Registriert: 19.01.2007 NX 5,6,7 ; CATIA V5 R-21
|
erstellt am: 10. Jan. 2014 09:17 <-- editieren / zitieren --> Unities abgeben:
Guten Morgen, den Ansatz hatte ich schon getestet, ich werde es nochmal versuchen, vielleicht hatte sich ein Fehler eingeschlichen?! Ich habe jetzt ein viel größeres Problem. Das Makro läuft zwar ohne Probleme, aber jetzt habe ich eine Baugruppe geöffnet zum testen, bei der das makro plötzlich rausfliegt und zwar an folgender Stelle in der letzten Zeile. Halte ich den Cursor darauf, zeigt er mir für Item (i) 7 an. hat jemend spontan eine Idee oder wie finde ich nun heraus wo sich das Programm aufhängt? 'Wenn der Produktknoten keine Kinder enthält If oNode.Products.Count = 0 Then bFoundP = False Set oPubs = Nothing Set oPubs = oNode.Publications 'Wenn Veröffentlichungen vorhanden sind prüfen If oPubs.Count > 0 Then 'Schleife läuft über jede gefundene Veröffentlichung For i = 1 To oPubs.Count Set oPub = oPubs.Item(i) Die Fehlermeldung besagt: Run-time-eroor '-2147467259 (80004005)': Automation error Unspecified error 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: 10. Jan. 2014 09:29 <-- editieren / zitieren --> Unities abgeben: Nur für Dennis030186
Servus Nur so eine Idee: Schau dir mal die entsprechende Datei (Part) an. Gibt es dort sieben Publictations? Sind alle Publication aktuell? Gruß Bernd ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
RSchulz Moderator² Head of CAD, Content & Collaboration / IT-Manager
Beiträge: 5541 Registriert: 12.04.2007 @Work Lenovo P510 Xeon E5-1630v4 64GB DDR4 Quadro P2000 256GB PCIe SSD 512GB SSD SmarTeam V5-6 R2016 Sp04 CATIA V5-6 R2016 Sp05 E3.Series V2019 Altium Designer/Concord 19 Win 10 Pro x64
|
erstellt am: 10. Jan. 2014 09:30 <-- editieren / zitieren --> Unities abgeben: Nur für Dennis030186
|
Dennis030186 Mitglied Design Engineer
Beiträge: 121 Registriert: 19.01.2007 NX 5,6,7 ; CATIA V5 R-21
|
erstellt am: 10. Jan. 2014 09:42 <-- editieren / zitieren --> Unities abgeben:
Zitat: Original erstellt von bgrittmann: Servus Versuch mal folgendes: - "Dim oParamLength As [b]Dimension" deklarieren - Parameter mit "Set oParamLength = oParams.CreateDimension(lenParamName, "LENGTH", 0)" anlegen.Gruß Bernd [/B]
Es funktioniert. Ich hatte Dimension nicht deklariert, sondern length und unten dann dimension genutzt. Das war mir nicht bewusst. Super, vielen Dank. Eine allgemeine Frage nochmal, in der Zeile Set oParamLength = oParams.CreateDimension(lenParamName, "LENGTH", 0) für den Befehl CreateDimension wird dann angegeben (iName As String, iMagnitude As String, iValue As Double). Der 1. und 3. punkt sind mir bewusst was es bedeutet, aber was besagt das iMagnitude? Habe es schon sehr oft gesehen, aber ich kann damit nicht wirklich was anfangen?! Das vorige Problem besteht leider immernoch. 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: 10. Jan. 2014 09:45 <-- editieren / zitieren --> Unities abgeben: Nur für Dennis030186
Servus Schau mal in der Doku: The dimension magnitude. Units are those of the IS system. Valid magnitudes are: "LENGTH": the unit is the meter. "ANGLE": the unit is the radian.Gruß Bernd ------------------ Warum einfach, wenn es auch kompliziert geht. [Diese Nachricht wurde von bgrittmann am 10. Jan. 2014 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Dennis030186 Mitglied Design Engineer
Beiträge: 121 Registriert: 19.01.2007 NX 5,6,7 ; CATIA V5 R-21
|
erstellt am: 13. Jan. 2014 08:46 <-- editieren / zitieren --> Unities abgeben:
Guten Morgen und vielen Dank. Die DOku habe ich momentan noch nicht, soltle ich bald jedoch bekommen. Zu dem Problem. Habe es nun lokalisiert, an welchen Teilen es hakt, aber ich sehe beim besten WIllen nicht wo da die Fehlerquelle sein sollte?! Es schaut so aus wie andere Parts auch, worüber das Makro aber ohne Probleme läuft. 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: 13. Jan. 2014 08:51 <-- editieren / zitieren --> Unities abgeben: Nur für Dennis030186
Servus Die Doku (zur Makroprogrammierung) liegt im CATIA-Installationsverzeichnis (such mal nach "V5Automation.chm") Bei welchem Zähler steigt das Makro aus? Hilft ein bereinigen der Dateien (CATDUA)? Gruß Bernd ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Dennis030186 Mitglied Design Engineer
Beiträge: 121 Registriert: 19.01.2007 NX 5,6,7 ; CATIA V5 R-21
|
erstellt am: 13. Jan. 2014 09:48 <-- editieren / zitieren --> Unities abgeben:
Guten Morgen, mit der Doku stimmt. Dachte es würde erst auftauchen, wenn die Extrahilfe in Catia installiert würde. Vielen Dank. Das Problem taucht bei Item 7 auf, wobei aber auch vorher schon Elektrifizierungen auftauchen und dies kein Problem darstellt. Abgesehen davon, dürfen diese Elektrifizierungen nicht raus und können momentan auch gar nicht gelöscht werden. 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: 13. Jan. 2014 09:58 <-- editieren / zitieren --> Unities abgeben: Nur für Dennis030186
Servus Also ich sehe nur 6 Veröffentlichungen. Was sind, bzw mit was wurden die "Elektrifizierungen" erstellt (spezielle Workbench)? Wenn du die "Elektrifizierungen" bearbeitest erscheinen dann zerschossene Elemente? ggf musst du die Fehlerbehandlung kurz ausschalten um Fehler durch diese speziellen Elemente abzufangen. Gruß Bernd ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Dennis030186 Mitglied Design Engineer
Beiträge: 121 Registriert: 19.01.2007 NX 5,6,7 ; CATIA V5 R-21
|
erstellt am: 13. Jan. 2014 15:37 <-- editieren / zitieren --> Unities abgeben:
Hallo Bernd, also ich habe den Fehler nun abgefangen per Errorhandler, was aber so finde ich eigentlich nicht gerade schön ist. In die Elektrifizierung sollte das Makro am besten gar nicht erst hineinschauen. Es scheint tatsächlich daran zu liegen, dass dort nur ein BackshellCnct vorhanden ist. In dem Part was weiter oben zu sehen ist, taucht dieses Element ebenfalls auf, hat jedoch keinen negative Einfluss auf das Makro. Wenn ich es bspw. mit MD2 öffne wird nur Elektrification (restricted) angezeigt. Öffne ich mein Product mit der EHI Lizenz dann taucht natürlich die Elektrifizierung auf. Hier der Quelltext bisher: Sub CATMain() Dim oMainPRD As Product Dim strParamName As String Dim lenParamName As String Set oMainPRD = CATIA.ActiveDocument.Product strParamName = "CHSFixingType" lenParamName = "CHSFixingLength" Call CreateString(oMainPRD, strParamName, lenParamName) End Sub Sub CreateString(ByVal oMainPRD As Product, ByVal strParamName As String, ByVal lenParamName As String) Dim oNode As Product Dim oPubs As Publications Dim oPub As Publication Dim oParams As Parameters Dim oParam As Parameter Dim oParamString As StrParam Dim oParamLength As Dimension Dim bFoundP As Boolean Dim i As Integer Dim j As Integer 'Schleife läuft über jeden Produktknoten im geöffneten Produkt For Each oNode In oMainPRD.Products 'Wenn der Produktknoten keine Kinder enthält If oNode.Products.Count = 0 Then bFoundP = False Set oPubs = Nothing Set oPubs = oNode.Publications 'Wenn Veröffentlichungen vorhanden sind prüfen If oPubs.Count > 0 Then 'Zur Überprüfung falls Fehler auftauchen MsgBox oNode.PartNumber 'MsgBox oPubs.Count For i = 1 To oPubs.Count Set oPub = oPubs.Item(i) On Error GoTo Fehler 'On Error Resume Next 'If Err = 0 Then 'MsgBox "i.O." 'ElseIf Err = 1 Then 'MsgBox "Bitte notieren Sie sich die nun folgende Nummer" 'MsgBox oNode.PartNumber 'MsgBox oPub.Name Next 'Schleife läuft über jede gefundene Veröffentlichung For i = 1 To oPubs.Count Set oPub = oPubs.Item(i) 'Wenn die benannte Veröffentlichung gefunden wurde If InStr(oPub.Name, "EHISUPPORT-RefPlane") > 0 Then ' MsgBox oNode.PartNumber 'Ausgabe der Partnummer in welcher sich ein EHISUPPORT-RefPlane befindet Set oParams = oNode.ReferenceProduct.UserRefProperties 'Prüfe jeden Parameter in den vorhanden Parametern des Teils For Each oParam In oParams 'Wenn der definierte Parameter gefunden wird, keine weitere Verarbeitung If Right(oParam.Name, Len(strParamName)) = strParamName Then bFoundP = True Exit For End If Next 'Wenn kein entsprechender Parameter gefunden wird, soll dieser erzeugt werden If bFoundP = False Then Set oParamString = oParams.CreateString(strParamName, 0#) oParamString.ValuateFromString "TEILBEZEICHNUNG" End If '-------------------------- 'Prüfe jeden Parameter in den vorhanden Parametern des Teils For Each oParam In oParams 'Wenn der definierte Paramerter (CHSFixingLength) gefunden wird, keine weitere Verarbeitung If Right(oParam.Name, Len(lenParamName)) = lenParamName Then bFoundP = True Exit For End If Next 'Wenn kein entsprechender Parameter (CHSFixingLength) gefunden wurde, soll dieser erzeugt werden If bFoundP = False Then Set oParamLength = oParams.CreateDimension(lenParamName, "LENGTH", 0) oParamString.ValuateFromString "0" End If End If Next End If 'Wenn der Produktknoten Kinder enthält Else 'Rufe die Prozedur neu auf mit dem Unterprodukt Call CreateString(oNode, strParamName, lenParamName) End If Next Exit Sub Fehler: MsgBox "Es liegt ein Problematik vor (wahrscheinlich in der Elektrifizierung, evtl. BackShellCnct). Bitte notieren Sie sich die nun folgende Nummer zur manuellen Kontrolle:" MsgBox oNode.PartNumber
End Sub Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Dennis030186 Mitglied Design Engineer
Beiträge: 121 Registriert: 19.01.2007 NX 5,6,7 ; CATIA V5 R-21
|
erstellt am: 14. Jan. 2014 09:13 <-- editieren / zitieren --> Unities abgeben:
Mir ist da noch etwas weiteres aufgefallen. Irgendwie scheint das Makro nun nicht mehr in den Teil hineinzugehen, wo Fixing length und Type erstellt werden überhaupt. Ich habe das nun versucht per errorhandler zu umgehen, wenn die Problematik auftaucht und auf die Electrification oder irgendein andere Problem gestossen wird. Jetzt bin ich mir nicht sicher, ist dieser an der richtigen Stelle oder muss er woanders hin und auf welche Art und Weise.Ich poste mal unten den gesamten Quellltext nochmals und zusätzlich meine zweite Überlegung des Errorhandlers, wo ich jedoch so eigentlich keinen Unterschied sehe, aber bei der zweiten Variante wieder meiN Problem mit Item 7 auftritt?! Auch wundert es mich, dass nicht alle Knotenpunkte vom Namen her ausgegeben werden nacheinander sondern mein erster ausgegebener Knotenpunkt der 2. ist? Hier der Ablauf wie mir die Node Pns ausgegeben werden Node Pn 1926635 Node Pn 1926638 Node Pn 50210870 Node Pn 50284514 Node Pn 1837383 Node Pn 1926641 Node Pn 1926640 Node Pn 815361-106 Node PN mit EHI Support 815361-106 Node PN mit EHI Support 815361-106 Node PN 815361-107 Node PN mit EHI Support 815361-107 Node PN mit EHI Support 815361-107 Node PN 50211073 Node PN 1926638 Node PN 1926635 Node PN 50284536 Node PN 1837387 Node PN 1926640 Node PN 1926641 Node PN 815361-102 NodePN mit EHI Support 815361-102 NodePN mit EHI Support 815361-102 Node PN 815361-103 NodePN mit EHI Support 815361-103 NodePN mit EHI Support 815361-103 Hier der Quelltext nun:
Sub CATMain() Dim oMainPRD As Product Dim strParamName As String Dim lenParamName As String Set oMainPRD = CATIA.ActiveDocument.Product strParamName = "CHSFixingType" lenParamName = "CHSFixingLength" Call CreateString(oMainPRD, strParamName, lenParamName) End Sub Sub CreateString(ByVal oMainPRD As Product, ByVal strParamName As String, ByVal lenParamName As String) Dim oNode As Product Dim oPubs As Publications Dim oPub As Publication Dim oParams As Parameters Dim oParam As Parameter Dim oParamString As StrParam Dim oParamLength As Dimension Dim bFoundP As Boolean Dim i As Integer Dim j As Integer 'Schleife läuft über jeden Produktknoten im geöffneten Produkt For Each oNode In oMainPRD.Products 'Wenn der Produktknoten keine Kinder enthält If oNode.Products.Count = 0 Then bFoundP = False Set oPubs = Nothing Set oPubs = oNode.Publications 'Wenn Veröffentlichungen vorhanden sind prüfen If oPubs.Count > 0 Then 'Zur Überprüfung falls Fehler auftauchen MsgBox "Node PN" MsgBox oNode.PartNumber 'MsgBox oPubs.Count '-------------------------------EVTL RAUSNEHMEN??? 'Schleife läuft über jede gefundene Veröffentlichung 'For i = 1 To oPubs.Count ' Set oPub = oPubs.Item(i) 'ERRORHANDLER ' On Error GoTo Fehler 'If Err = 1 Then On Error Resume Next 'MsgBox "Problem" 'Resume Next 'End If 'If Err = 0 Then 'MsgBox "i.O." 'ElseIf Err = 1 Then 'MsgBox "Bitte notieren Sie sich die nun folgende Nummer" 'MsgBox oNode.PartNumber 'MsgBox oPub.Name ' Next '----------------------------------------- 'Schleife läuft über jede gefundene Veröffentlichung For i = 1 To oPubs.Count Set oPub = oPubs.Item(i)
'Wenn die benannte Veröffentlichung gefunden wurde If InStr(oPub.Name, "EHISUPPORT-RefPlane") > 0 Then MsgBox "Node PN mit EHI SUPPORT" MsgBox oNode.PartNumber 'Ausgabe der Partnummer in welcher sich ein EHISUPPORT-RefPlane befindet Set oParams = oNode.ReferenceProduct.UserRefProperties '----------------------------------------------------------------------------------------------------- 'Prüfe jeden Parameter in den vorhanden Parametern des Teils For Each oParam In oParams 'Wenn der definierte Parameter (CHSFixingType) gefunden wird, keine weitere Verarbeitung If Right(oParam.Name, Len(strParamName)) = strParamName Then bFoundP = True Exit For End If Next 'Wenn kein entsprechender Parameter (CHSFixingType) gefunden wird, soll dieser erzeugt werden If bFoundP = False Then Set oParamString = oParams.CreateString(strParamName, 0#) oParamString.ValuateFromString "TEILBEZEICHNUNG" End If '-------------------------- 'Prüfe jeden Parameter in den vorhanden Parametern des Teils For Each oParam In oParams 'Wenn der definierte Paramerter (CHSFixingLength) gefunden wird, keine weitere Verarbeitung If Right(oParam.Name, Len(lenParamName)) = lenParamName Then bFoundP = True Exit For End If Next 'Wenn kein entsprechender Parameter (CHSFixingLength) gefunden wurde, soll dieser erzeugt werden If bFoundP = False Then Set oParamLength = oParams.CreateDimension(lenParamName, "LENGTH", 0) oParamString.ValuateFromString "0" End If '----------------------------------------------------------------------------------------------------- End If Next End If 'Wenn der Produktknoten Kinder enthält Else 'Rufe die Prozedur neu auf mit dem Unterprodukt Call CreateString(oNode, strParamName, lenParamName) End If Next Exit Sub Fehler: MsgBox "Es liegt eine Problematik vor (wahrscheinlich in der Elektrifizierung, evtl. BackShellCnct). Bitte notieren Sie sich die nun folgende Nummer zur manuellen Kontrolle:" MsgBox oNode.PartNumber End Sub Und hier die andere Überlegung bezüglich des Errorhandlers an der selben Stelle wo ich momentan On Error Resume Next stehen habe was aber zur Item 7 Problematik und somit zum Absturz führt: If Err = 1 Then MsgBox "Problem" Resume Next End If Ich hoffe man kann das so nachvollziehen?! 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: 14. Jan. 2014 10:52 <-- editieren / zitieren --> Unities abgeben: Nur für Dennis030186
Servus Anbei ein kleines Beispiel wie du Abfangen kannst wenn eine Publication nicht vorhanden/ansprechbar ist: Code: On Error Resume Next 'Fehlerbehandlung ausschalten Set oPub = oPubs.Item(i) On Error GoTo 0 'Fehlerbehandlung einschaltenIf Not oPub Is Nothing Then 'machwas MsgBox "Publication vorhanden" End If
Gruß Bernd ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Dennis030186 Mitglied Design Engineer
Beiträge: 121 Registriert: 19.01.2007 NX 5,6,7 ; CATIA V5 R-21
|
erstellt am: 14. Jan. 2014 11:57 <-- editieren / zitieren --> Unities abgeben:
Hallo Bernd, bei Deinem beispiel sehe ich den Zusammenhang nicht so ganz. Das hatte ich soweit ausgetestet schon: On Error Resume Next 'Fehlerbehandlung ausschalten Set oPub = oPubs.Item(i) On Error GoTo 0 'Fehlerbehandlung einschalten Hier läuft das Makro dann auch durch, was mir halt dort dann einfach noch fehlt, ist eine Messagebox die mir ausgibt, dass sich ein Fehler bei der jeweiligen Teilenummer verbirgt (zur manuellen Kontrolle). Der Teil danach den Du geschrieben hast, dieser gibt mir doch nur die Information jedes Mal wieder, dass eine Publication vorhanden ist. In einem Teil sind 59 pubs vorhanden, somit poppt nur für diesen Durchlauf 59 Mal das Fenster mit "Publication vorhanden" auf. Sinngemäß möchte ich gerne soetwas: On Error Resume Next 'Fehlerbehandlung ausschalten MsgBox " FEHLER BEI PARTNUMMER XYZ" 'XYZ Soll nun die PN aus onode.PartNumber sein Set oPub = oPubs.Item(i) On Error GoTo 0 'Fehlerbehandlung einschalten Das Problem ist aber, dass das so nicht funktioniert, da er mir jetzt die MsgBox immer ausgeibt unabhängig von Fehlern 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: 14. Jan. 2014 12:01 <-- editieren / zitieren --> Unities abgeben: Nur für Dennis030186
Servus Mein Code war nur ein Beispiel wie du mir einem Fehler umgehen kannst ohne einen Fehler auszugeben und zu einer Fehlerbehandlung zu springen. Das du den Code noch deinen Bedürfnissen anpassen musst ist klar. Gruß Bernd ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Dennis030186 Mitglied Design Engineer
Beiträge: 121 Registriert: 19.01.2007 NX 5,6,7 ; CATIA V5 R-21
|
erstellt am: 14. Jan. 2014 13:43 <-- editieren / zitieren --> Unities abgeben:
Hallo Bernd, das ist klar, dass es nur ein Beispiel ist, wie gesagt genau das hatte ich ja schon vor Deinem Post auch schon ausgetestet, aber wie oben erwähnt möchte ich solch ein Verhalten, wozu ich jedoch kein Beispiel bisher finden konnte bzw. auch sämtliches Austesten bringt mich dort nicht weiter bisher. Edit: Ich habe es jetzt so gelöst: Exit Sub Errhandler: ErrMsg = "Es liegt ein Fehler bei folgender Partnummer vor: " & oNode.PartNumber & Chr(13) & "Bitte notieren Sie sich diese Nummer und nehmen Sie eine manuelle Kontrolle dieses Teils vor." & Chr(13) & Chr(13) & "OK=Bearbeitung fortsetzen" & Chr(13) & "Cancel=Makro abbrechen" result = MsgBox(ErrMsg, vbOKCancel) ' Resume at the line where the error occurred if the user ' clicks OK; otherwise end the macro. If result = vbOK Then Resume Next If result = vbCancel Then ???? Was kommt als letztes dort hin? Bei Then Exit sub macht das Makro wie gehabt weiter und mit End sub bekomme ich einen Syntax error...
Edit: Then End [Diese Nachricht wurde von Dennis030186 am 14. Jan. 2014 editiert.] [Diese Nachricht wurde von Dennis030186 am 15. Jan. 2014 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Dennis030186 Mitglied Design Engineer
Beiträge: 121 Registriert: 19.01.2007 NX 5,6,7 ; CATIA V5 R-21
|
erstellt am: 15. Jan. 2014 15:36 <-- editieren / zitieren --> Unities abgeben:
Hallo nochmals, so ich komme Schritt für Schritt immer besser mit Makros zurecht, zwar noch schleppend, aber ich bemühe mich :-) Ich versuche nun quasi das gleiche wie zuvor, jedoch abgewandelt. Ich möchte nundort wo das EHISUPPORT auftaucht die Distanz dieser beiden Planes messen. Ich finde absolut nichts brauchbares hierzu, wie ich die 2 Planes wähle und die Distanz hier ausgebe. Bitte euch nochmal um eure Hilfe. 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: 15. Jan. 2014 17:36 <-- editieren / zitieren --> Unities abgeben: Nur für Dennis030186
Servus Dann such mal in der Doku und hier im Forum nach "SPAWorkbench" und "Measureable". Messen in einer Baugruppe kann recht interessant werden *grins* Gruß Bernd ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |