Autor
|
Thema: Parameter Count, nicht vorhanden dann Abbruch (1827 mal gelesen)
|
moppesle Ehrenmitglied V.I.P. h.c. Konstrukteur
Beiträge: 3418 Registriert: 28.05.2009 CATIA V5 R19 SP9 WIN 7 64bit
|
erstellt am: 09. Jan. 2012 22:38 <-- editieren / zitieren --> Unities abgeben:
Hallo zusammen, habe mir ein Makro gescchrieben, daß mir einen bestimmten Parameter auf "True" oder "False" setzt in einer Produktstruktur. Funktioniert soweit. Code: Set boolParam1 = parameters1.Item("BBOX_AN_AUS") boolParam1.Value = bWertboolean
Ist aber in einem Part dieser Parameter nicht vorhanden, funktionirt es nicht mehr. Wie kann ich nun nach dem Parameter suchen und abbrechen lassen wenn er nicht vorhanden ist. Bitte um verständniss bin Anfänger. Gruß Uwe Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
DanielFr. Moderator Manager
Beiträge: 2506 Registriert: 10.08.2005 HP Compaq 8710w, Intel Core Duo T7700, 2,40 Ghz, 3GB RAM, Windows XP Professionel @32bit, Quadro FX 1600M, CATIA V5 R19 SP3
|
erstellt am: 10. Jan. 2012 06:54 <-- editieren / zitieren --> Unities abgeben: Nur für moppesle
|
moppesle Ehrenmitglied V.I.P. h.c. Konstrukteur
Beiträge: 3418 Registriert: 28.05.2009 CATIA V5 R19 SP9 WIN 7 64bit
|
erstellt am: 10. Jan. 2012 07:30 <-- editieren / zitieren --> Unities abgeben:
Hallo Daniel, danke für deine Mühe. Leider ist das nicht ganz was ich gesucht habe. Hab mich vieleicht nicht richtig ausgedrückt. Ich gehe Rekursiv durch meine Struktur, und möchte in jedem Part den Parameter verändern. Wenn dieser Parameter im Part nicht enthalten ist (was auch sein kann) soll das Makro einfach ohne Fehlermeldung weiterlaufen und nichts an diesem Part ändern. (The methode Item failed)ist dann die Meldung die ich bekomme. Gruß Uwe Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
HoBLila Mitglied Dipl.-Ing. (BA) praktische Informatik - Senior Entwickler CAx
Beiträge: 1118 Registriert: 29.05.2008 DELL PRECISION T3500 Intel(R) Xeon(R) CPU W3540 @ 2.93GHz 12285 MB RAM NVIDIA Quadro FX 1800 Microsoft Windows 7 Enterprise Service Pack 1 CATIA V5 R19 SP09 HF69 VB6.5 CAA RADE CDC
|
erstellt am: 10. Jan. 2012 08:14 <-- editieren / zitieren --> Unities abgeben: Nur für moppesle
Ne Rekursion machste ja über eine Prozedur oder Funktion. Diese verlässt Du einfach im Fehlerfall. also Code:
Private Sub meineRekursion() On Error Goto ErrHandler 'ErrHandler ist hierbei die Sprungmarke auf die das Script spring falls er einen Fehler auslößt da er ja das .Item nicht finden kannSet boolParam1 = parameters1.Item("BBOX_AN_AUS") boolParam1.Value = bWertboolean Exit Sub ErrHandler: Err.clear End Sub
Was mir jedoch besser gefallen würde wäre, wenn statt mit der Sprungmarke und einem geschmissenen Fehler zu arbeiten, Du lieber vorher schaust ob es den Parameter gibt und wenn nicht dann direkt ein Exit Sub machst. Das wäre duetlich stabiler und würde die Fehlerbehandlung nicht unterbinden. :-) Also Daniels Vorschlag war schon der richtige, er musste nur auf Deine neue Aufgabe angepasst werden. :-) ------------------ Mit freundlichen Grüßen, Henry Schneider alias Lila Es gibt einen ewigen Wettkampf zwischen der Natur und den Ingenieuren: Die Ingenieure versuchen, immer idioten-sicherere Systeme zu bauen, die Natur versucht, immer bessere Idioten zu bauen Xing Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
moppesle Ehrenmitglied V.I.P. h.c. Konstrukteur
Beiträge: 3418 Registriert: 28.05.2009 CATIA V5 R19 SP9 WIN 7 64bit
|
erstellt am: 10. Jan. 2012 08:29 <-- editieren / zitieren --> Unities abgeben:
Hallo Henry Zitat: Was mir jedoch besser gefallen würde wäre, wenn statt mit der Sprungmarke und einem geschmissenen Fehler zu arbeiten, Du lieber vorher schaust ob es den Parameter gibt und wenn nicht dann direkt ein Exit Sub machst
Das ist das was ich mir vorgestellt habe. Habe das ganze schon in einer Funktion stehen, müßte diese nur noch anpassen. Hier mal die Funktion: Code: Function ChangeParameter(RefDoc As Document, Prod as Product) As Integer 'MsgBox "test2" 'Dim iCount As Integer 'Dim sArr As String Dim PartProd As Part Dim parameters1 As Parameters Dim boolParam1 As Parameter If Typename(RefDoc) = "PartDocument" Then set PartProd = RefDoc.Part Set parameters1 = PartProd.Parameters Else Set parameters1 = Prod.Parameters End if Set boolParam1 = parameters1.Item("BBOX_AN_AUS") boolParam1.Value = bWertboolean
end Function
Wie bekomme ich das hin. Sorry bin Programmieranfänger Gruß Uwe Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
moppesle Ehrenmitglied V.I.P. h.c. Konstrukteur
Beiträge: 3418 Registriert: 28.05.2009 CATIA V5 R19 SP9 WIN 7 64bit
|
erstellt am: 10. Jan. 2012 11:17 <-- editieren / zitieren --> Unities abgeben:
Hallo Daniel, hab deinen Code mal eingebaut. Bekomme aber eine Fehlermeldung in der Zeile (On Error Goto ErrHandler). (kommpelierungsfehler in Microsoft VBScript. (Syntaxfehler)) Was mache ich falsch? Gruß Uwe Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
DanielFr. Moderator Manager
Beiträge: 2506 Registriert: 10.08.2005 HP Compaq 8710w, Intel Core Duo T7700, 2,40 Ghz, 3GB RAM, Windows XP Professionel @32bit, Quadro FX 1600M, CATIA V5 R19 SP3
|
erstellt am: 10. Jan. 2012 12:55 <-- editieren / zitieren --> Unities abgeben: Nur für moppesle
Hallo Uwe, du machst gar nichts falsch. Ein VBScript unterstützt keine Sprungmarken. DIese können nur in CatScripten und VBA-Makros verwendet werden. Die Laufzeitfehlerbehandlung kann jedoch genau wie bei CATScript und VBA auch in einem VBScript abgeschaltet werden. Anbei nochmal ein anderer Beispielcode. Hier habe ich die Anmerkungen von Henry noch eingebaut. Zum Ablauf sieht das jetzt folgendermaßen aus: 1. Aus der CATMain Routine wird die Funktion zum Ändern des Wertes ausgerufen (bzw. aus deiner Rrkursiven Routine) 2. Die Laufzeitfehlerbehandlung wird abgeschaltet 3. Das Script prüft die Zugreifbarkeit des Parameters 4. Fall er verfügbar ist wird er geändert / falls nicht wird die Routine verlassen Ich hoffe das hilft dir erst einmal weiter. Code:
Dim bWertboolean 'As BooleanSub CATMain() '***DEKLARATIONEN Dim objDoc 'As Document Dim objRootProduct 'As Product Dim objProduct 'As Product '***WERTZUWEISUNG (NUR EXEMPLARISCH) bWertboolean = true '***DOKUMENT INSTANZIEREN Set objDoc = CATIA.ActiveDocument '***DOKUMENTENTYP ABFRAGEN If TypeName(objDoc) <> "ProductDocument" Then MsgBox "Ungültiger Dateityp!" + vbNewLine + "Das Makro kann nur in einem Product ausgeführt werden", vbExclamation, "Falscher Dateityp" Exit Sub End If '***PRODUKTE INSTANZIEREN (AUCH PARTS) Set objRootProduct = objDoc.Product '***SCHLEIFE DURCH PRODUKTE For Each objProduct In objRootProduct.Products FuncChangeParameter objProduct.ReferenceProduct.Parent Next End Sub '***FUNKTION ZUM AENDERN VON PARAMETERN Function FuncChangeParameter(RefDoc)' As Integer '***DEKLRATIONEN Dim PartProd 'As Part Dim parameters1 'As Parameters Dim boolParam1 'As Parameter '***BESTIMMUNG DES DOKUMENTENTYPES If TypeName(RefDoc) = "PartDocument" Then Set PartProd = RefDoc.Part Set parameters1 = PartProd.Parameters ElseIf TypeName(RefDoc) = "ProductDocument" Then Set parameters1 = RefDoc.Product.Parameters Else MsgBox "Unerwarteter Dokumententyp!", vbExclamation, "DOKUMENT: FEHLER" End If '***PARAMTER ZUWEISEN (FEHLER WIRD GGF IRGONIERT) On Error Resume Next 'Laufzeitfehlerbehandlung ausschalten Set boolParam1 = parameters1.Item("BBOX_AN_AUS") If boolParam1 Is Nothing Then 'Der gewünschte Parameter NICHT ChangeParameter = -1 'Rueckgabewert bestimmen (Fall: Parameter wurde nicht gefunden) Else boolParam1.Value = bWertboolean 'Wertzuweisung an Parameter ChangeParameter = 1 'Ruckgabewerte bestimmen (Fall: Parameter wurde erfolgreich geändert) End If '***LAUFZEITFEHLERBEHANDLUNG EINSCHALTEN On Error GoTo 0 End Function
------------------ MFG Daniel Systeminformation | Inoffizielle CATIA Hilfeseite | CATIA FAQ | Suche | TraceParts (Normteile...) | 3D Content Central (noch mehr Normteile...) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
HoBLila Mitglied Dipl.-Ing. (BA) praktische Informatik - Senior Entwickler CAx
Beiträge: 1118 Registriert: 29.05.2008 DELL PRECISION T3500 Intel(R) Xeon(R) CPU W3540 @ 2.93GHz 12285 MB RAM NVIDIA Quadro FX 1800 Microsoft Windows 7 Enterprise Service Pack 1 CATIA V5 R19 SP09 HF69 VB6.5 CAA RADE CDC
|
erstellt am: 10. Jan. 2012 13:02 <-- editieren / zitieren --> Unities abgeben: Nur für moppesle
CATSkript unterstützt, glaube ich, keine Sprungmarken. Aber auch kein Problem. Dann mach ein Code:
On Error Resume Next
und mach nach der entsprechenden Stelle, wo der Fehler auftreten müsste: Code:
If(Not Err.Number = 0) then ' hier Dein Code end if End Sub
------------------ Mit freundlichen Grüßen, Henry Schneider alias Lila Es gibt einen ewigen Wettkampf zwischen der Natur und den Ingenieuren: Die Ingenieure versuchen, immer idioten-sicherere Systeme zu bauen, die Natur versucht, immer bessere Idioten zu bauen Xing Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
DanielFr. Moderator Manager
Beiträge: 2506 Registriert: 10.08.2005 HP Compaq 8710w, Intel Core Duo T7700, 2,40 Ghz, 3GB RAM, Windows XP Professionel @32bit, Quadro FX 1600M, CATIA V5 R19 SP3
|
erstellt am: 10. Jan. 2012 18:16 <-- editieren / zitieren --> Unities abgeben: Nur für moppesle
|
moppesle Ehrenmitglied V.I.P. h.c. Konstrukteur
Beiträge: 3418 Registriert: 28.05.2009 CATIA V5 R19 SP9 WIN 7 64bit
|
erstellt am: 10. Jan. 2012 18:50 <-- editieren / zitieren --> Unities abgeben:
Hallo Daniel, hab dein Script teilweise in meine Struktur eingearbeitet. Funktionier wunderbar. Danke auch für die detaillierte Erklärung der Einzelnen Schritte. Hat mir sehr geholfen. Danke auch dir Henry Gruß Uwe
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
moppesle Ehrenmitglied V.I.P. h.c. Konstrukteur
Beiträge: 3418 Registriert: 28.05.2009 CATIA V5 R19 SP9 WIN 7 64bit
|
erstellt am: 27. Mai. 2014 09:45 <-- editieren / zitieren --> Unities abgeben:
Hallo, möchte dieses Thema wieder auffwärmen. Habe mir das Makro von Daniel angepasste um einen Stringparameter (Stuecklistenrelevant) in allen Produkten und Parts umzubenennen. Leider werden nur die Parameter der Part aber nicht die der Produkte umbenannt. Hat da jemand einen Tip.
Code:
Dim sWertString 'As StringSub CATMain() '***DEKLARATIONEN Dim objDoc 'As Document Dim objRootProduct 'As Product Dim objProduct 'As Product '***WERTZUWEISUNG (NUR EXEMPLARISCH) sWertString = "das ist ein test 12315" '***DOKUMENT INSTANZIEREN Set objDoc = CATIA.ActiveDocument '***DOKUMENTENTYP ABFRAGEN If TypeName(objDoc) <> "ProductDocument" Then MsgBox "Ungültiger Dateityp!" + vbNewLine + "Das Makro kann nur in einem Product ausgeführt werden", vbExclamation, "Falscher Dateityp" Exit Sub End If '***PRODUKTE INSTANZIEREN (AUCH PARTS) Set objRootProduct = objDoc.Product '***SCHLEIFE DURCH PRODUKTE For Each objProduct In objRootProduct.Products FuncChangeParameter objProduct.ReferenceProduct.Parent Next End Sub '***FUNKTION ZUM AENDERN VON PARAMETERN Function FuncChangeParameter(RefDoc)' As Integer '***DEKLRATIONEN Dim PartProd 'As Part Dim parameters1 'As Parameters Dim boolParam1 'As Parameter '***BESTIMMUNG DES DOKUMENTENTYPES If TypeName(RefDoc) = "PartDocument" Then Set PartProd = RefDoc.Part Set parameters1 = PartProd.Parameters ElseIf TypeName(RefDoc) = "ProductDocument" Then Set parameters1 = RefDoc.Product.Parameters Else MsgBox "Unerwarteter Dokumententyp!", vbExclamation, "DOKUMENT: FEHLER" End If '***PARAMTER ZUWEISEN (FEHLER WIRD GGF IRGONIERT) On Error Resume Next 'Laufzeitfehlerbehandlung ausschalten Set boolParam1 = parameters1.Item("Stuecklistenrelevant") If boolParam1 Is Nothing Then 'Der gewünschte Parameter NICHT ChangeParameter = -1 'Rueckgabewert bestimmen (Fall: Parameter wurde nicht gefunden) Else boolParam1.Value = sWertString 'Wertzuweisung an Parameter ChangeParameter = 1 'Ruckgabewerte bestimmen (Fall: Parameter wurde erfolgreich geändert) End If '***LAUFZEITFEHLERBEHANDLUNG EINSCHALTEN On Error GoTo 0 End Function
------------------ Gruß Uwe Auch Catia ist nur ein Mensch! 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: 27. Mai. 2014 12:37 <-- editieren / zitieren --> Unities abgeben: Nur für moppesle
Servus Uwe Vermutlich scheitert das Makro daran, dass in einem Product die Parameter immer den Namen mit dem Muster "Name_des_Products\Parametername" vorliegt. Deshalb liefert dir das Makro keinen Parameter zurück. (siehe ähnliche Lösung siehe hier) Zusätzlich werden in der Parameter-Collection des Rootproducts auch alle Parameter von SubProducts und Einzelteilen erfasst. Deshalb solltest du auf die Parameter-Collection des Products mit "oDoc.Product.Parameters.RootparameterSet.DirectParameteres" zugreifen. Gruß Bernd ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
moppesle Ehrenmitglied V.I.P. h.c. Konstrukteur
Beiträge: 3418 Registriert: 28.05.2009 CATIA V5 R19 SP9 WIN 7 64bit
|
erstellt am: 27. Mai. 2014 14:21 <-- editieren / zitieren --> Unities abgeben:
Hallo Bernd, hab mal den Code angepasst.Fett gedruckt. Leider werden jetzt nur noch ein Part und ein Produkt geändert. Code: Dim sWertString 'As StringSub CATMain() '***DEKLARATIONEN Dim objDoc 'As Document Dim objRootProduct 'As Product Dim objProduct 'As Product '***WERTZUWEISUNG (NUR EXEMPLARISCH) sWertString = "test nein" '***DOKUMENT INSTANZIEREN Set objDoc = CATIA.ActiveDocument '***DOKUMENTENTYP ABFRAGEN If TypeName(objDoc) <> "ProductDocument" Then MsgBox "Ungültiger Dateityp!" + vbNewLine + "Das Makro kann nur in einem Product ausgeführt werden", vbExclamation, "Falscher Dateityp" Exit Sub End If '***PRODUKTE INSTANZIEREN (AUCH PARTS) Set objRootProduct = objDoc.Product '***SCHLEIFE DURCH PRODUKTE For Each objProduct In objRootProduct.Products FuncChangeParameter objProduct.ReferenceProduct.Parent Next End Sub '***FUNKTION ZUM AENDERN VON PARAMETERN Function FuncChangeParameter(RefDoc) ' As Integer '***DEKLRATIONEN Dim PartProd 'As Part Dim parameters1 'As Parameters Dim boolParam1 'As Parameter '***BESTIMMUNG DES DOKUMENTENTYPES If TypeName(RefDoc) = "PartDocument" Then Set PartProd = RefDoc.Part Set parameters1 = PartProd.Parameters ElseIf TypeName(RefDoc) = "ProductDocument" Then 'Set parameters1 = RefDoc.Product.Parameters Set parameters1 = RefDoc.Product.Parameters.RootParameterSet.DirectParameters Else MsgBox "Unerwarteter Dokumententyp!", vbExclamation, "DOKUMENT: FEHLER" End If '***PARAMTER ZUWEISEN (FEHLER WIRD GGF IRGONIERT) On Error Resume Next 'Laufzeitfehlerbehandlung ausschalten Set boolParam1 = parameters1.Item("Stuecklistenrelevant") If boolParam1 Is Nothing Then 'Der gewünschte Parameter NICHT ChangeParameter = -1 'Rueckgabewert bestimmen (Fall: Parameter wurde nicht gefunden) Else boolParam1.Value = sWertString 'Wertzuweisung an Parameter ChangeParameter = 1 'Ruckgabewerte bestimmen (Fall: Parameter wurde erfolgreich geändert) End If '***LAUFZEITFEHLERBEHANDLUNG EINSCHALTEN On Error GoTo 0 End Function
------------------ Gruß Uwe Auch Catia ist nur ein Mensch! 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: 27. Mai. 2014 14:53 <-- editieren / zitieren --> Unities abgeben: Nur für moppesle
Servus Ist ja klar. Dein Makro arbeitet nur die erste Ebene ab. Damit alles abgearbeitet wird musst du das Makro rekursiv aufbauen. Gruß Bernd ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
moppesle Ehrenmitglied V.I.P. h.c. Konstrukteur
Beiträge: 3418 Registriert: 28.05.2009 CATIA V5 R19 SP9 WIN 7 64bit
|
erstellt am: 27. Mai. 2014 15:20 <-- editieren / zitieren --> Unities abgeben:
|
bgrittmann Moderator Konstrukteur
Beiträge: 11780 Registriert: 30.11.2006 CATIA V5R19
|
erstellt am: 27. Mai. 2014 15:33 <-- editieren / zitieren --> Unities abgeben: Nur für moppesle
|
moppesle Ehrenmitglied V.I.P. h.c. Konstrukteur
Beiträge: 3418 Registriert: 28.05.2009 CATIA V5 R19 SP9 WIN 7 64bit
|
erstellt am: 27. Mai. 2014 16:04 <-- editieren / zitieren --> Unities abgeben:
|