Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  CATIA V5 Programmierung
  Selection - gültige Typen / The method Item failed

Antwort erstellen  Neues Thema erstellen
CAD.de Login | Logout | Profil | Profil bearbeiten | Registrieren | Voreinstellungen | Hilfe | Suchen

Anzeige:

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen nächster neuer Beitrag | nächster älterer Beitrag
  
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


Sehen Sie sich das Profil von ChrisHH an!   Senden Sie eine Private Message an ChrisHH  Schreiben Sie einen Gästebucheintrag für ChrisHH

Beiträge: 11
Registriert: 31.05.2012

HP Z400 64bit
Catia V5 R16 + R18
VB6

erstellt am: 31. Mai. 2012 10:26    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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


Sehen Sie sich das Profil von Jens Hansen an!   Senden Sie eine Private Message an Jens Hansen  Schreiben Sie einen Gästebucheintrag für Jens Hansen

Beiträge: 1056
Registriert: 05.08.2000

erstellt am: 31. Mai. 2012 11:05    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für ChrisHH 10 Unities + Antwort hilfreich

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

------------------
Inoffizielle CATIA-Hilfeseite
Kochbuch - CATIA V5 automatisieren

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

DanielFr.
Ehrenmitglied V.I.P. h.c.
Manager


Sehen Sie sich das Profil von DanielFr. an!   Senden Sie eine Private Message an DanielFr.  Schreiben Sie einen Gästebucheintrag für DanielFr.

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für ChrisHH 10 Unities + Antwort hilfreich

HAllo  ,

ich gebe JEns recht es wird wahrscheinlich an der Renamed-Eigenschaft liegen die nicht jedes Objekt zwangsläufig besitzen muss. Du kannst jedoch mit Hilfe von On Eror Resume next...If Err.Number <> 0 etc. arbeiten um das Problem zu umgehen.

------------------
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

ChrisHH
Mitglied
F&E


Sehen Sie sich das Profil von ChrisHH an!   Senden Sie eine Private Message an ChrisHH  Schreiben Sie einen Gästebucheintrag für ChrisHH

Beiträge: 11
Registriert: 31.05.2012

HP Z400 64bit
Catia V5 R16 + R18
VB6

erstellt am: 31. Mai. 2012 11:35    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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


Sehen Sie sich das Profil von bgrittmann an!   Senden Sie eine Private Message an bgrittmann  Schreiben Sie einen Gästebucheintrag für bgrittmann

Beiträge: 12014
Registriert: 30.11.2006

CATIA V5R19

erstellt am: 31. Mai. 2012 11:41    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für ChrisHH 10 Unities + Antwort hilfreich

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


Sehen Sie sich das Profil von HoBLila an!   Senden Sie eine Private Message an HoBLila  Schreiben Sie einen Gästebucheintrag für HoBLila

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für ChrisHH 10 Unities + Antwort hilfreich

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


Sehen Sie sich das Profil von ChrisHH an!   Senden Sie eine Private Message an ChrisHH  Schreiben Sie einen Gästebucheintrag für ChrisHH

Beiträge: 11
Registriert: 31.05.2012

HP Z400 64bit
Catia V5 R16 + R18
VB6

erstellt am: 31. Mai. 2012 13:21    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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


Sehen Sie sich das Profil von HoBLila an!   Senden Sie eine Private Message an HoBLila  Schreiben Sie einen Gästebucheintrag für HoBLila

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für ChrisHH 10 Unities + Antwort hilfreich

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


Sehen Sie sich das Profil von bgrittmann an!   Senden Sie eine Private Message an bgrittmann  Schreiben Sie einen Gästebucheintrag für bgrittmann

Beiträge: 12014
Registriert: 30.11.2006

CATIA V5R19

erstellt am: 31. Mai. 2012 14:22    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für ChrisHH 10 Unities + Antwort hilfreich

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


Sehen Sie sich das Profil von ChrisHH an!   Senden Sie eine Private Message an ChrisHH  Schreiben Sie einen Gästebucheintrag für ChrisHH

Beiträge: 11
Registriert: 31.05.2012

HP Z400 64bit
Catia V5 R16 + R18
VB6

erstellt am: 31. Mai. 2012 14:52    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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

Anzeige.:

Anzeige: (Infos zum Werbeplatz >>)

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen

nächster neuerer Beitrag | nächster älterer Beitrag
Antwort erstellen


Diesen Beitrag mit Lesezeichen versehen ... | Nach anderen Beiträgen suchen | CAD.de-Newsletter

Administrative Optionen: Beitrag schliessen | Archivieren/Bewegen | Beitrag melden!

Fragen und Anregungen: Kritik-Forum | Neues aus der Community: Community-Forum

(c)2024 CAD.de | Impressum | Datenschutz