Autor
|
Thema: UserRefProperties value ändern (1836 mal gelesen)
|
Suchtiii94 Mitglied Konstrukteur
Beiträge: 44 Registriert: 23.10.2017 Catia V5 R28 SP3
|
erstellt am: 01. Feb. 2019 07:27 <-- editieren / zitieren --> Unities abgeben:
Servus, ich würde gerne die UserRefProperties für alle offenen Dokumente ändern. Die PartNumber beschreibe ich so: Code: CurrentProduct.Item(i).PartNumber = CurrentProduct.Item(i).ReferenceProduct.Nomenclature
Jetzt habe ich folgendes versucht: Code: CurrentProduct.Item(i).UserRefProperties.Item("Properties\Test").Value = "1234"
Leider bekomme ich den Fehler "The method Item failed". Wie kann ich das beheben? 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: 01. Feb. 2019 09:18 <-- editieren / zitieren --> Unities abgeben: Nur für Suchtiii94
Servus Funktioniert es wenn du noch das ReferenceProduct einfügst. Um eventuelle Probleme durch Spracheinstellungen zu verhindern könntest du wie hier gezeigt auf eine UserRefProperty zugreifen. Gruß Bernd ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Suchtiii94 Mitglied Konstrukteur
Beiträge: 44 Registriert: 23.10.2017 Catia V5 R28 SP3
|
erstellt am: 01. Feb. 2019 10:34 <-- editieren / zitieren --> Unities abgeben:
Servus, das mit dem ReferenceProduct funktioniert leider nicht. Bei deinem verlinktem Beitrag kann ich auch nur auf das ActiveDocument zugreifen. Ich bekommen es nicht hin mit einer Schleife über alle geöffneten Dokumente zu gehen. Die Schleife funktioniert nur für Umbennnungen der Nomenclature und PartNumber 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: 01. Feb. 2019 10:49 <-- editieren / zitieren --> Unities abgeben: Nur für Suchtiii94
Servus AFAIR hat der Namen einer Userproperty den Aufbau: PartNumber\Properties (bzw Eigenschaften)\Parametername In dem verlinkten Beitrag ist die Funktion getUserProperty das interessante. Damit muss du nur den Parameternmen angeben (also kein PartNumber und Properties). Die CATMain zeigt nur wie die Funktion aufgerufen wird. Gruß Bernd ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Suchtiii94 Mitglied Konstrukteur
Beiträge: 44 Registriert: 23.10.2017 Catia V5 R28 SP3
|
erstellt am: 01. Feb. 2019 11:09 <-- editieren / zitieren --> Unities abgeben:
Alles klar, ich hab die Funktion jetzt mal eingebunden. Wenn ich das acDoc verwende klappt auch alles. Allerdings mit Schleife mag er das nicht: Code: Sub CATMAIN() Dim acDoc Dim acProd Set acDoc = CATIA.ActiveDocument Set acProd = acDoc.Product acProd.Update acProd.ApplyWorkMode DESIGN_MODE Set documents = CATIA.documents
For Each Item In documents If Right(Item.Name, 10) = "CATProduct" Then Set CurrentProduct = Item.Product.Products For I = 1 To CurrentProduct.Count Dim ParamWorks As Parameters Set ParamWorks = acProd.UserRefProperties 'Set ParamWorks = CurrentProduct.Item(I).UserRefProperties
Dim sMaterial As Parameter Set sMaterial = getUserProperty(ParamWorks, "Test") sMaterial.Value = "123456"
acProd.Revision = "Test" 'CurrentProduct.Item(I).Revision = "Test"
Next
End If Next End Sub Function getUserProperty(UserProperties As Parameters, ParameterName As String) As Parameter
Dim F As Integer For F = 1 To UserProperties.Count If Right(UserProperties.Item(F).Name, Len(ParameterName)) = ParameterName Then Set getUserProperty = UserProperties.Item(F) Exit Function End If Next Set getUserProperty = Nothing End Function
Hast du noch eine idee? 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: 01. Feb. 2019 11:11 <-- editieren / zitieren --> Unities abgeben: Nur für Suchtiii94
Servus Schon mal: Code: Set ParamWorks = CurrentProduct.Item(I).ReferenceProduct.UserRefProperties
probiert? Gruß Bernd PS: Warum hast du den Zähler in der Funktion umbenannt? Dir scheint die Gültigkeit/Sichtbarkeit von Variablen nicht klar zu sein. ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Suchtiii94 Mitglied Konstrukteur
Beiträge: 44 Registriert: 23.10.2017 Catia V5 R28 SP3
|
erstellt am: 01. Feb. 2019 11:20 <-- editieren / zitieren --> Unities abgeben:
Servus, das mit den Variablen ist tatsächlich Neuland für mich, genauso wie das Arbeiten mit Funktionen. Habe ich bisher noch nie verwendet. Wenn ich deine Zeile einfüge, bekomme ich die Meldung Object variable or With block variable not set in der Zeile: Code: sMaterial.Value = "123456"
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: 01. Feb. 2019 11:30 <-- editieren / zitieren --> Unities abgeben: Nur für Suchtiii94
Servus Was für einen Typ hat der Parameter? Ein String? Je nach Typ die Anführungszeichen weg lassen (falls es zB eine Länge ist) oder ValuateFromString nutzen. Ist sMaterial gefüllt bzw wurde der Parameter gefunden? Deshalb nach Nothing prüfen (siehe das Beispiel) Du weist das ein Teil der Dokumente mehrfach abgearbeitet wird? In der Document-Collection sind alle geöffneten Dokumente einthalten (in eigenem Fenster geöffnet, in Baugruppen verbaut, aus denen Zeichnungsansichten ableitet wurden, ...) Gruß Bernd PS: Arbeitest du in VBA? Dann bitte auch Haltepunkte, Watch- und Localfenster nutzen. ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Suchtiii94 Mitglied Konstrukteur
Beiträge: 44 Registriert: 23.10.2017 Catia V5 R28 SP3
|
erstellt am: 01. Feb. 2019 11:56 <-- editieren / zitieren --> Unities abgeben:
Servus, ich habe den Fehler gefunden. Es liegt daran, dass bei manchen Teilen der Parameter gelockt war. Wenn ich On Error resume next einbaue überspringt er diese Teile. Das mit den geöffneten Dokumenten ist mir bewusst. Danke für die Unterstützung. PS: Danke, vor allem für den Tipp mit dem Localfenster Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Suchtiii94 Mitglied Konstrukteur
Beiträge: 44 Registriert: 23.10.2017 Catia V5 R28 SP3
|
erstellt am: 06. Feb. 2019 08:33 <-- editieren / zitieren --> Unities abgeben:
Servus, mit folgendem Makro möchte ich für das AktiveFenster in der kompletten Struktur eine neue Positionsnummer vergeben. Wie kann ich eine Abfrage einbauen, ob der Parameter überhaupt exisitert? Wenn er nicht existiert soll nämlich kein Fenster aufgehen und der Parameter nicht beschrieben werden. Aktuell hab ich einfach einen Beschreibversuch für jedes Teil eingebaut, welchen ich mit On Error Resume Next durchlaufen lasse. Code: Sub CATMain() Set oRoot = CATIA.ActiveDocument Set oProducts = oRoot.Product.Products Set RootBaugruppe = oRoot.Product SUB_ProdScan oProducts End SubSub SUB_ProdScan(oProducts) For I = 1 To oProducts.Count Set oParentDoc = oProducts.Item(I).ReferenceProduct.Parent If oProducts.Item(I).Products.Count > 0 Then SUB_ProdScan oProducts.Item(I).Products End If For Each Item In oProducts oProducts.Item(I).Revision = "Test" Next Dim ParamWorks As Parameters Set ParamWorks = oProducts.Item(I).ReferenceProduct.UserRefProperties Dim Positionsnummer As Parameter Set Positionsnummer = getUserProperty(ParamWorks, "Positionsnummer") On Error Resume Next Positionsnummer.Value = InputBox(oProducts.Item(I).Name, "Positionsnummer eingeben!") On Error GoTo 0 Next End Sub Function getUserProperty(UserProperties As Parameters, ParameterName As String) As Parameter Dim I As Integer For I = 1 To UserProperties.Count If Right(UserProperties.Item(I).Name, Len(ParameterName)) = ParameterName Then Set getUserProperty = UserProperties.Item(I) Exit Function End If Next Set getUserProperty = Nothing End Function
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. Feb. 2019 15:47 <-- editieren / zitieren --> Unities abgeben: Nur für Suchtiii94
Servus Du kannst doch einfach prüfen ob getUserProperty Nothing zurück liefert. Du könntest natürlich auch die Funktion erweitern, dass der Parameter erzeugt wird und gleich ein Wert zugewiesen wird. Gruß Bernd
------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Suchtiii94 Mitglied Konstrukteur
Beiträge: 44 Registriert: 23.10.2017 Catia V5 R28 SP3
|
erstellt am: 06. Feb. 2019 16:42 <-- editieren / zitieren --> Unities abgeben:
|
bgrittmann Moderator Konstrukteur
Beiträge: 11780 Registriert: 30.11.2006 CATIA V5R19
|
erstellt am: 06. Feb. 2019 16:58 <-- editieren / zitieren --> Unities abgeben: Nur für Suchtiii94
|
Suchtiii94 Mitglied Konstrukteur
Beiträge: 44 Registriert: 23.10.2017 Catia V5 R28 SP3
|
erstellt am: 06. Feb. 2019 17:08 <-- editieren / zitieren --> Unities abgeben:
|