| |
| CATIA V5 Grundkurs | Einsteiger - 5 Std. 15 Min |
| |
| KISTERS 3DViewStation: Unterstützung für 3D CAD Kollaboration mit Lieferanten, eine Pressemitteilung
|
Autor
|
Thema: Selection - gültige Typen / The method Item failed (2796 mal gelesen)
|
ChrisHH Mitglied F&E
Beiträge: 11 Registriert: 31.05.2012 HP Z400 64bit Catia V5 R16 + R18 VB6
|
erstellt am: 31. Mai. 2012 10:26 <-- editieren / zitieren --> Unities abgeben:
Guten Tag Allerseits, leider musste ich mir einen neuen Account machen, da ich meine Zugangsdaten nicht mehr kenne und eine neue E-mail hab. Wie dem auch sei, auf jedenfall habe ich ein Problem bei dem ich nicht mehr weiter komme. Die Suchfunktion hat leider auch nichts brauchbares ausgeworfen, was sehr selten vorkommt. Nun zu meinem Problem: Ich habe ein größeres Product mit vielen Componenten wie Parts, Products und Catia Components. In vielen Componeten befinden sich Parameter die manuell erstellt und umbenannt wurden. Genau diese will ich nun per Macro identifizieren und aus dem Product löschen. Alle anderen Standard Parameter und von Catia erstellten sollen unangetastet bleiben. Meine Code sieht bisher so aus: Code:
Public Sub search()Dim wastesel 'As Selection Dim wasteob 'As Object Set catia = GetObject(, "CATIA.Application") Set wasteobj = catia.ActiveDocument Set wastesel = wasteobj.Selection
wastesel.search "Knowledgeware.Parameter.Name !=Origin*;all" ' step 1 If wastesel.Count > 0 Then For i = 1 To wastesel.Count If wastesel.Item(i).Value.Renamed = wahr Then Set wasteob1 = wastesel.Item(i).Value
wastesel.Clear wastesel.Add (wastesel.Item(i)) wastesel.Delete wastesel.Clear End If Next End If
Fehlermeldung: The method item failed Leider habe ich zZ keinen Zugriff auf die Catia Hilfe. Auch muss ich gestehen das meine Erfahrung in dem Gebiet noch im enstehen ist Aber ich lerne leißig und komme immer besser zurecht, nur ab und zu hackt es nochmal, wie in diesem Fall. Kann mir hier einer auf die Sprünge helfen? schöne Grüße aus Hamburg
[Diese Nachricht wurde von ChrisHH am 31. Mai. 2012 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Jens Hansen Mitglied CAx-Spezialist
Beiträge: 1056 Registriert: 05.08.2000
|
erstellt am: 31. Mai. 2012 11:05 <-- editieren / zitieren --> Unities abgeben: Nur für ChrisHH
|
DanielFr. Ehrenmitglied V.I.P. h.c. 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: 31. Mai. 2012 11:34 <-- editieren / zitieren --> Unities abgeben: Nur für ChrisHH
|
ChrisHH Mitglied F&E
Beiträge: 11 Registriert: 31.05.2012 HP Z400 64bit Catia V5 R16 + R18 VB6
|
erstellt am: 31. Mai. 2012 11:35 <-- editieren / zitieren --> Unities abgeben:
Zitat: Original erstellt von Jens Hansen: Hallo, ich vermute mal dass es an "Renamed" scheitert. Es könnten ja rein tehoretisch auch Parameter gefunden werden, die "Renamed" nicht besitzen. Versuche mal nur mit .Value auf den Parameter zuzugreifen und dann die Eigenschaft .Renamed abzufragen.SG Jens
Vermutlich verstehe ich dich nicht richtig, aber ist es nicht so, das die Parameter die nicht "Origin" sind, ALLE den wert "Renamed" haben? Davon abgesehen hab ich keine Vorstellung wie ich das anders gestallten könnte... leider. Wie soll ich denn vor der If Abfrage auf die richtigen Parameter zugreifen die von der schleife doch noch garnicht in dem selection set angelegt wurden? Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bgrittmann Moderator Konstrukteur
Beiträge: 12014 Registriert: 30.11.2006 CATIA V5R19
|
erstellt am: 31. Mai. 2012 11:41 <-- editieren / zitieren --> Unities abgeben: Nur für ChrisHH
Servus Was mir noch dazu auffällt: AFAIR werden im Makro immer die Booleschen-Werte TRUE und FALSE verwendet (nicht so wie von CATIA dargestellt wahr/unwahr) Gruß Bernd ------------------ Warum einfach, wenn es auch kompliziert geht. 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: 31. Mai. 2012 12:36 <-- editieren / zitieren --> Unities abgeben: Nur für ChrisHH
ich würde auch das .Value-Objekt, wenn vorhanden erst einmal in ein anderes Objekt, mit richtig bestimmten Typ packen und dann das .Renamed prüfen. Und ja das mit dem TRUE und FALSE ist auch korrekt. :-) ------------------ 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 |
ChrisHH Mitglied F&E
Beiträge: 11 Registriert: 31.05.2012 HP Z400 64bit Catia V5 R16 + R18 VB6
|
erstellt am: 31. Mai. 2012 13:21 <-- editieren / zitieren --> Unities abgeben:
Also ich hab mein Sub mal ein bischen umgebaut und es funktioniert schon besser Code:
Public Sub search()Dim wastesel 'As Selection Dim wastename As String Set catia = GetObject(, "CATIA.Application") 'nur zum test notwendig
Set wasteobj = catia.ActiveDocument Set wastesel = wasteobj.Selection wastesel.search "Knowledgeware.Parameter.Name !=Origin*;all" ' step 1 If wastesel.Count > 0 Then For i = 1 To wastesel.Count If wastesel.Item(i).Value.Renamed = 1 Then 'On Error Resume Next wastename = wastesel.Item(i).Value.Name Set wastepara = wasteobj.Product.Parameters.Item(wastename) wastesel.Clear
wastesel.Add wastepara wastesel.Delete wastesel.Clear End If Next End If End Sub
Zu euren Antworten: Ich verstehe leider nicht so recht wie ich das umsetzten soll, die Abfrage des Renamed wertes anders zu gestallten? Und der Wert den ich benötige um eine korrekte Abfrage zu ermöglichen ist bei mir mal "Wahr" dann wieder "True" oder auch "1", obwohl mir die Überwachung des Parameters in VB immer "Wahr" anzeigt. Warum das so ist weiss ich leider nicht. Naja kurz zu meinem veränderten Code.
- Die Suche nach den Parametern die nicht Origin sind funktioniert. - Das abfragen nach "Renamed" scheint auch zu klappen. - Das Hinzufügen des betroffenen Parameters in mein selection set auch Sobald die Schleife aber den zweiten Durchlauf startet, ist ja das selection set leer und kann natürlich nicht mehr nach "Renamed" geprüft werden. Mein erster Gedanke war, die erste Selection irgendwie zu "Speichern" und ein zweites Selection set zum auswählen und löschen der Teile, welche positiv auf "Renamed" gechecked wurden, zu benutzen. Nachdem die Schleife dann endet und in den nächsten Durchlauf geht, müsste ich nur das erste Selection Set wieder abrufen. Ist sowas möglich? Alternativ könnte ich halt jedes mal wieder neu Suchen, aber bei großen Baugruppen mit 1000+ Parametern dauert das natürlich extrem Lange. Ich hoffe ich konnte meine Problematik einigermaßen verständlich schildern Gruß 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: 31. Mai. 2012 13:38 <-- editieren / zitieren --> Unities abgeben: Nur für ChrisHH
Deine Selection ist leer, weil Du sie clearst und das mehrfach. Ich sehe nur eine Schleife. Klar kann man die wieder füllen, scheib vorher alles in ein Datenfeld, Collection oder Dictionary und dann wieder zurück. Zur anderen Frage kann ich nur empfehlen erst einmal ein paar Seiten in einem Tutorial zur VB-Programmierung zu lesen, das würde Dir im Vorfeld ungemein helfen und viele Probleme, wie das setzen eines deklarierten Objektes, was als Wissen scheinbar noch fehlt, gar nicht erst aufkommen lassen. ------------------ 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 |
bgrittmann Moderator Konstrukteur
Beiträge: 12014 Registriert: 30.11.2006 CATIA V5R19
|
erstellt am: 31. Mai. 2012 14:22 <-- editieren / zitieren --> Unities abgeben: Nur für ChrisHH
Servus Mein Vorschlag zu dem Makro: - Die for-Next-Schleife rückwärts abarbeiten - falls der Parameter nicht umbenannt wurde diesen aus der Selection entfernen (Remove2) - Selection ganz am Schluss löschen. zB (ungetestet): Code: Public Sub search()Dim wastesel 'As Selection Dim wastename As String Set catia = GetObject(, "CATIA.Application") 'nur zum test notwendig Set wasteobj = catia.ActiveDocument Set wastesel = wasteobj.Selection wastesel.search "Knowledgeware.Parameter.Name !=Origin*;all" If wastesel.Count > 0 Then For i = wastesel.Count to 1 Step -1 If wastesel.Item(i).Value.Renamed = 0 Then wastesel.Remove2(i) End If Next wastesel.Delete wastesel.Clear End If End Sub
Gruß Bernd------------------ Warum einfach, wenn es auch kompliziert geht. [Diese Nachricht wurde von bgrittmann am 31. Mai. 2012 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
ChrisHH Mitglied F&E
Beiträge: 11 Registriert: 31.05.2012 HP Z400 64bit Catia V5 R16 + R18 VB6
|
erstellt am: 31. Mai. 2012 14:52 <-- editieren / zitieren --> Unities abgeben:
Mir ist bewusst das ich noch einige Lücken habe, allerdings lerne ich mit Trial&Error meist am nachhaltigsten. Bücher habe ich natürlich auch, allerdings ohne die praktische Anwendung ist der Lerneffekt gering. Zu Bernd. Stimmt, die naheligenste Lösung ist am einfachsten. Wär ich da mal selber drauf gekommen :> Aber zu meiner Überraschung habe ich es jetzt mit der vorgeschlagenen Collection selbst lösen können: Code:
Public Sub search() Dim wastesel 'As Selection Dim wastename As String Dim wastecoll Set catia = GetObject(, "CATIA.Application") 'nur zum test notwendig
Set wasteobj = catia.ActiveDocument Set wastesel = wasteobj.Selection wastesel.search "Knowledgeware.Parameter.Name !=Origin*;all" ' step 1 ReDim wastecoll(wastesel.Count) For i = 1 To wastesel.Count Set wastecoll(i) = wastesel.Item(i).Value Next If wastesel.Count > 0 Then For i = 1 To wastesel.Count wastesel.Clear wastesel.Add wastecoll(i) If wastesel.Item(1).Value.Renamed = 1 Then wastesel.Delete wastesel.Clear End If Next End If End Sub
Grüße ps.: Ich habe mir zum Start VB6 für Dummies gekauft. Hatte gute Kritiken und ich war nicht unzufrieden. Kann jemand ein Buch empfehlen was vom vermittelten Wissen so der nächste "logische" Schritt wäre? Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |