Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  CATIA V5 Programmierung
  Parameter auslesen

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
Autor Thema:  Parameter auslesen (10145 mal gelesen)
IIYTII
Mitglied



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

Beiträge: 85
Registriert: 30.05.2007

Catia V5 R19
Programmierung unter CATvba

erstellt am: 13. Aug. 2009 13:14    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

Hallo,

ich würde gerne aus meinem Produkt die Parameter auslesen, die vom Benutzer angelegt werden. Ich bin leider blutiger Anfänger und versuche gerade die Ergebnisse des Suchergebnisses in ein Array oder ähnliches zu speichern.


Code:
Dim partDocument1 As PartDocument
Set partDocument1 = CATIA.ActiveDocument

Dim selection1 As Selection
Set selection1 = partDocument1.Selection

selection1.Search "Name=Parameter*,all"


Was kann ich mir unter selection1.search vorstellen? Welches Ergebnis liefert mir dieser Befehl zurück und wie kann ich mir die Ergebnisse speichern um sie dann nachher weiter zu verarbeiten?

Ich würde gerne die Parameter auslesen und in eine Excel Datei speichern

Gruß

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

DanielFr.
Moderator
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: 13. Aug. 2009 14:10    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 IIYTII 10 Unities + Antwort hilfreich

Hallo,

die Methode .search sucht im aktiven Dokument mit den entsprechenden Einstellungen (in deinem Beipsiel sucht das Teile alle Paramter und das auf jeder Ebene). Das ganze wird in die Selektion-Arry zurückgeben. D.h.

mit selection1.Item(x).Value kannst du auf die einzelnen Werte der Selektion zugreifen.

Um alle Werte aus dieser Selektion abzuarbeiten brauchst du kein extra Array (das frisst nur unnötig Ressourcen). Du hast das Ergebnis ja schon in einem Systemarray vorliegen.

Das heißt jetzt musst du nur noch das Array durchlaufen und nach bestimmten Kriterien suchen

For i = 0 to selection1.Count
  Set myAktiSel = Selektion1.Item(i).Value
Next

Diese kleine Schleife durchläuft alle Items des Selektion und verschiebt jedes nacheinander in das Objekt "myAktiSel". Achtung das ist kein Array. Du musst hier zwischen jetzt dein Code reinpacken.

------------------
MFG Daniel

Die KATJA ist halt doch nur ne zickige Französin

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

IIYTII
Mitglied



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

Beiträge: 85
Registriert: 30.05.2007

Catia V5 R19
Programmierung unter CATvba

erstellt am: 15. Aug. 2009 00:09    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

Danke dir, werde mal versuchen, ob ich damit zurechtkomme. Kannst du neben dem Buch Makroprogrammierung von R.Ziethen noch ein Kompendium empfehlen? Bzw. gibt es sowas überhaupt für CATIA?

Habe anscheinend in der näheren Zukunft öfters mit sowas zu tun...

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

Randle
Mitglied
CAD/PLM Consultant


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

Beiträge: 695
Registriert: 12.04.2003

Win10 x64
CATIA V5 R18, R19, R21, R27-29

erstellt am: 15. Aug. 2009 16: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 Nur für IIYTII 10 Unities + Antwort hilfreich

Hallo,

ich versuche es wann immer es geht zu vermeiden mit der Selection Klasse zu arbeiten, da zum Einem die Performance in der Regel nicht ganz so prickelnd ist (hängt natürlich davon ab in welchem Umfang man sie nutzt), zum Anderen werden nicht alle Eigenschaften/Methoden voll unterstützt (Beispiel: SelectElement2) so das man dann wieder rumtricksen muss.

Wenn du den Paramternamen kennst kannst du auch wie folgt vorgehen.

Sub CATMain

Dim oPartDoc as PartDocument
Set oPartDoc = Catia.ActiveDocument 'setzt vorraus das auch ein CATPart geöffnet und aktiv ist, ansonsten vorher über TypeName überprüfen
Dim oPart as Part
Set oPart = oPartDoc.Part

Dim oParameter as Parameter
Set oParameter = oPart.Paramters.Item("MeinParameter") 'sollte Item nicht funktionieren dann kannst/musst du es mit GetItem probieren, das habe ich jetzt gerade nicht so genau im Kopf. Sofern der Parameter vorhanden ist, entspricht das Objekt oParameter jetzt Deinen Parameter und du kannst gemäß der V5Automation.chm die entsprechenden Methoden/Eigenschaften nutzen. z.B. Msgbox oParameter.VaueAsString

End Sub

Alternativ kannst du natürlich auch noch alle Parameter über eine Schleife durchlaufen und mit dem Instr Befehl nach eine bestimmten Zeichenkette suchen. Das ist manchmal notwendig, da die Namensgebung von Parametern je nach Erstellungsmethode unterschiedlich ist. Musst einfach mal in die Properties des Parameters nach dem Namen schauen.

Dim I as Integer
For I = 1 to oPart.Parameters.Count
Set oParameter = oPart.Parameters.Item(I)
If Instr(1,oParameter.Name,"MeinParameter",vbTextCompare) <> 0 Then
[Anweisungen]
End If
Next

Wie du siehst führen viele Wege nach Rom (einer der Vor- und gleichzeitig Nachteile von V5). Welchen Weg du jetzt wählst, hängt auch davon ab was du mit dem Parameter vorhast.

Viel Erfolg

------------------
MfG
Randle

! It's not a bug, it's a feature !

[Diese Nachricht wurde von Randle am 15. Aug. 2009 editiert.]

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

DanielFr.
Moderator
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: 15. Aug. 2009 16:46    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 IIYTII 10 Unities + Antwort hilfreich

Hallo,

@Randle: das SelectedElement2-4 wird doch voll unterstütz solange du im CATscript bleibst. In CATvba wird es auch unterstütz nur darf die Selektion nicht als solche, sondern als Objekt deklariert werden. Das hat aber IMHO nichts mit rumtricksen am Hut.

Dennoch gebe ich dir recht. Eine Selektion würde ich nur einsetzen wenn es unbedingt erforderlich ist (z.B. wenn ein Anwender eine Interaktion machen muss)

------------------
MFG Daniel

Die KATJA ist halt doch nur ne zickige Französin

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

Randle
Mitglied
CAD/PLM Consultant


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

Beiträge: 695
Registriert: 12.04.2003

Win10 x64
CATIA V5 R18, R19, R21, R27-29

erstellt am: 15. Aug. 2009 17:10    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 IIYTII 10 Unities + Antwort hilfreich

Hallo Daniel,

vielleicht ist der Begriff rumtricksen nicht gaanz zutreffend.
Ich entwickel meine Makro meistens im VBA Editor, einfach des Komforts wegen. Falls notwendig Kopiere ich den Quelltext entsprechend in ein CATScript oder catvbs.
In Folge dessen nervt es dann schon ein wenig wenn mit die Autovervollständigung fehlt, weil ich die Selection als Object/Variant deklariere. Ich delariere dann meistens so
Dim oSel ' as Selection.

Wenn ich dann das Kommantarzeichen auskommentiere (bei intensiven Änderungen am Quellcode) habe ich die Autovervollständigung. Vor dem Testlauf muss man das dann wieder auskommentieren, ansonsten bekomme ich eine Fehlermeldung.

Des Weiteren bekommst du auch ein Problem (Stand R18) (egal wie du die Selection deklarierst) wenn du z.B. SelectElement2 innerhalb einer Reaction oder VBScript (Knowledgeware Feature!) verwenden willst. Dann musst du aus der Reaction ein externes Script starten.

Ich ersetze dann mal nachträglich das rumtricksen durch nervig/unkomfortabel. ;-)

An dieser Stelle möchte ich dir gerne meine Anerkennung für deine enorme Aktivität und dein Engagement hier im Forum aussprechen. Sehr gute Arbeit, weiter so!


------------------
MfG
Randle

! It's not a bug, it's a feature !

[Diese Nachricht wurde von Randle am 15. Aug. 2009 editiert.]

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

IIYTII
Mitglied



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

Beiträge: 85
Registriert: 30.05.2007

Catia V5 R19
Programmierung unter CATvba

erstellt am: 15. Aug. 2009 17: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

Also ich kenne keinen Parameter, würde jedoch gerne alle Parameter (wie viele auch immer) MIT PFAD in eine Excel Tabelle speichern.

ich habe jetzt folgenden Quelltext:

Code:
Sub CATMain()

Dim partDocument1 As PartDocument
Set partDocument1 = CATIA.ActiveDocument

Dim selection1 As Selection
Set selection1 = partDocument1.Selection

selection1.Search "Name=Parameter*,all"

MsgBox (Selektion1.Item(1).Value)

End Sub


Möchte zunächst nur versuchen, dass erste Ergebnis als MSGBox ausgeben zu lassen. Als Fehler bekomme ich grundsätzlich: 424, Object required

Nun ja, Visual Basic an sich habe ich mal gelernt und habe auch sofort verstanden, wie das mit der For Schleife laufen soll. Jedoch habe ich keine wirkliche Ahnung, wie man CATIA mit welchen Befehlen ansteuert. Gibt es denn ein Kompendium? mit kurzen, sachlichen erklärung was es macht und wofür es gut ist?

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

DanielFr.
Moderator
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: 15. Aug. 2009 17:25    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 IIYTII 10 Unities + Antwort hilfreich

Hallo,

in deinen Punkten gebe ich dir recht. Das mit dem deklarieren als Objekt und der fehlenden Autovervollständigung ist nervig. Aber man gewöhnt sich daran. Ich meine mit der Zeit hat man den Quelltext schon so drinnen das man die Vervollständigung gar nicht mehr nutzt (mir geht es zu mindestens so).

Gut das Problem mit der Reaction und dem SelectedElement 2 wurde hier erst kürzlich diskutiert. Das sehe ich aber als generelles Problem einer Reaction (bzw. der KnowledgeWare) und nicht als Problem der Selektion. Manchmal braucht man einfach eine Interaktion und dann muss halt der Workaround mit dem zusätzlichen CATscript innerhalb des Dokuments herhalten (was ich allerdings nicht als Problem sehe da bei dieser Methode keine externen Referenzen (Makros) gebraucht werden die irgendwann fehlen weil sie ein Admin der auf Windows administrieren soll ausversehentlich verschoben hat) 

Wie schon im letzen Beitrag gesagt ich würde es auch vermeiden wenn es möglich ist und das ist es in diesem Fall definitiv. Es ist sogar in den meisten Fällen in denen eine Selektion eingesetzt wird vermeidbar. Aber dennoch ist es eine gute Funktion deren Mächtigkeit nicht wegzudiskutieren ist (gerade das Interaktionsthema (z.B. eine Vorderansicht in einer Zeichnung mit einem Script erstellen ist ohne das SelectedElement4 nicht möglich)

Danke für dein Lob, ich geb mir jeden Tag Mühe

------------------
MFG Daniel

Die KATJA ist halt doch nur ne zickige Französin

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

Randle
Mitglied
CAD/PLM Consultant


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

Beiträge: 695
Registriert: 12.04.2003

Win10 x64
CATIA V5 R18, R19, R21, R27-29

erstellt am: 15. Aug. 2009 17: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 IIYTII 10 Unities + Antwort hilfreich

Hallo IIYTII,

folgender Code sollte auch bei dir gehen (R19 SP3, ohne Selection)

Sub CATMain()

Dim oPartDoc As PartDocument
Set oPartDoc = CATIA.ActiveDocument 'setzt vorraus das auch ein CATPart geöffnet und aktiv ist, ansonsten vorher über TypeName überprüfen
Dim oPart As Part
Set oPart = oPartDoc.Part

Dim oParameter As Parameter
Dim I As Integer

For I = 1 To oPart.Parameters.Count
    MsgBox oPart.Parameters.Item(I).Parent.Name & "\" & oPart.Parameters.Item(I).Name & "  - Value: " & oPart.Parameters.Item(I).ValueAsString
Next

End Sub


Vielleicht noch ein kleiner Tip. Ich würde das ganze in eine csv Datei schreiben. Das ist zum Einem etwas einfacher, zum Anderen bist du Betriebssystem neutral und auch nicht an eine bestimmte Office- bzw. Excelversion gebunden. Die CSV Datei erstellst du mit Tabstop oder Semikolon als Trennzeichen für die einzelnen Spalten.

------------------
MfG
Randle

! It's not a bug, it's a feature !

[Diese Nachricht wurde von Randle am 15. Aug. 2009 editiert.]

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

IIYTII
Mitglied



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

Beiträge: 85
Registriert: 30.05.2007

Catia V5 R19
Programmierung unter CATvba

erstellt am: 15. Aug. 2009 19:06    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

ok, dass bringt mich schonmal ne ganze Ecke weiter. Habe mir jetzt alles in die Excel Tabelle schreiben lassen.

Optional bräuchte ich jetzt noch eine Möglichkeit, um nur die benutzerangelegten Parameter auszulesen, weil ich es auf genau diese abgesehen habe.

Als nächsten Schritt müssten die Parameter aus der Tabelle wieder eingelesen werden können.

Code:
oPart.Parameters.Item(I).Value = Excel.Sheets("Tabelle1").Range("C" & I).Value

klappt nicht ... mh?

wäre ja auch zu einfach :-)
bekommen immer 450 - Wrong number of arguments or invalid property assignment

Soll ich nochmal die Frage nach dem Kompendium stellen? 

Aber auf jeden Fall schonmal Danke bis hierhin!

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

Randle
Mitglied
CAD/PLM Consultant


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

Beiträge: 695
Registriert: 12.04.2003

Win10 x64
CATIA V5 R18, R19, R21, R27-29

erstellt am: 15. Aug. 2009 19:32    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 IIYTII 10 Unities + Antwort hilfreich

Hallo,

Aus der Doku:
-------------------------------------
IsTrueParameter
Returns a boolean saying if the parameter is a true one (real, dimension, string, etc.

Renamed
Returns a boolean saying if the parameter is a renamed parameter or not.
-------------------------------------
Über diese Parametereigenschaften kannst du filtern, also
        If oPart.Parameters.Item(I).IsTrueParameter Then
bzw.
        If oPart.Parameters.Item(I).Renamed Then

**********************************************
Excel:
Wenn ich Daten aus Excel lesen möchte, dann gehe ich immer über Cells(x,y), also
oPart.Parameters.Item(I).Value = Excel.Cells(3,I)
Vielleicht hat jemand anders Erfahrungen mit der Range Methode.

**********************************************

Thema Kompendium und mögliche Informationsquellen:
CAD.DE 'kennst du ja schon
Ein weiteres (englisches) V5 Forum findest du unter  www.coe.org

V5Automation.chm (immer erste Quelle für mich) im Installationsverzeichnis von V5, dort wo auch die CNEXT.exe liegt. Alternativ kommt man auch über die Onlinedoku dran.

Beim Hanser Verlag gibt es zwei Bücher bezgl. Scripting

Eine weitere Quelle ist der Makrorekorder. Damit kann man auch einiges bezgl. Objektnamen, Syntax usw. erschlagen.

Es gibt bei den Systemhäusern natürlich auch Schulungsunterlagen, die in der Regel nicht kostenlos (sondern nur im Rahmen einer Schulung) rausgegeben werden.

Für VB/VBA allgemein gibt es etliche Foren im Netz, sowie die Hilfe (F1) im VBA Editor.

Mehr fällt mir zum Thema Kompendium gerade nicht ein.

------------------
MfG
Randle

! It's not a bug, it's a feature !

[Diese Nachricht wurde von Randle am 15. Aug. 2009 editiert.]

[Diese Nachricht wurde von Randle am 15. Aug. 2009 editiert.]

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

IIYTII
Mitglied



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

Beiträge: 85
Registriert: 30.05.2007

Catia V5 R19
Programmierung unter CATvba

erstellt am: 15. Aug. 2009 23: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

Wiereinmal danke für den hilfreichen Beitrag,

folgendes Problem ergibt sich nun:

Code:
oPart.Parameters.Item(I).Value = Excel.Cells(I, 3)

meckert, wenn ich "15mm" im Feld stehen habe (Type missmatch Error 13). Eine Zahl "15" geht ohne Probleme.
Nun ist es aber so, dass beim auslesen in das Excelfeld automatisch "15mm" geschrieben werden.

Die Tipps zu den Infosquellen sind auch super

Hast du dafür noch ne fixe Lösung?

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

DanielFr.
Moderator
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: 16. Aug. 2009 09:56    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 IIYTII 10 Unities + Antwort hilfreich

Hallo IIYTII,

wenn kommt den den Fehler? Beim auslesen und in die Zelle schrieben funktioniert es noch oder? Ich nehme an das du den Wert (zum Einlesen (ich denke hier kommt der Fehler)) als Integer definiert hat. D.h. er erwartet eine Zahl und zwar nur eine Zahl (ohne (mm)). D.h. du musst den Wer auslesen dann an den "mm" mit einem "Split" splitten. Du bekommst dann ein Array mit der Länge 2 zurück. "myarray(0)" ist der Wert und "myarray(1)" ist die Einheit. Wenn du also jetzt einen Integerwert an eine Integervariable übergeben willst dann machst du folgendes

Code:

Dim myInt As Integer
Dim myString As String 'so kommt der Wert aus Excel
Dim mySplit() As String

myString = "15mm"

mySplit = Split(myString, "mm") 'hier splittest du nach der Einheit
myInt = CInt(mySplit(0)) 'Hier übergibst du den Integerwert an die Variable


------------------
MFG Daniel

Die KATJA ist halt doch nur ne zickige Französin

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

Randle
Mitglied
CAD/PLM Consultant


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

Beiträge: 695
Registriert: 12.04.2003

Win10 x64
CATIA V5 R18, R19, R21, R27-29

erstellt am: 16. Aug. 2009 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 IIYTII 10 Unities + Antwort hilfreich

Moin,

falls der Tip von Daniel nicht geht, versuch doch mal statt Value, ValuateFromString (evtl. musst du die genaue Schreibweise mal in der Doku nachlesen, habe gerade keine zur Hand). Also so:

oPart.Parameters.Item(I).ValuateFromString = Excel.Cells(I, 3)

Ansonsten gebe ich Daniel recht. Du musst bei Parametern auf den Datentyp achten. Ausserdem musst du z.B. bei Dimensionparametern (Length, Angle usw.) auch immer die Einheit mit geben, sonst bekommst du teilweise abenteuerlicher Ergebnisse. Catia nimmt wenn keine Einheit angegeben wird die Standardeinheit (bei Length z.B. Meter).

------------------
MfG
Randle

! It's not a bug, it's a feature !

[Diese Nachricht wurde von Randle am 16. Aug. 2009 editiert.]

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

IIYTII
Mitglied



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

Beiträge: 85
Registriert: 30.05.2007

Catia V5 R19
Programmierung unter CATvba

erstellt am: 16. Aug. 2009 11:08    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

Ich hatte den Fehler gemacht, und den Inhalt des Parameters als String eingelesen:

Code:
oPart.Parameters.Item(I).ValueAsString

dann wird automatisch die Einheit mitgenommen. Benutzt man nur .Value, wird der Inhalt als Zahl übergeben bzw. auch TRUE und FALSE funktionieren. Deshalb hätte es auch Probleme gegeben, wenn ich die Ergebnisse als Integer gespeichert hätte.

Es funktioniert, ich bin zufrieden. Muss jedoch nur noch an der Performance n bisschen arbeiten, wie Randle auch z.B. schon sagte, eine *.csv datei benutzen. Das Auslesen größerer Baugruppen nimmt ja leider recht viel Zeit in Anspruch...

Danke euch!!!

Edit: Ja, an das Problem habe ich auch schon gedacht -> 10mm zu 10m etc. muss das mal testen @ randle
Im Grunde genommen ließt ja das Makro auch die Variablen als Standardeinheit aus aber wer weiß welcher Anwendungsfall in CATIA lauert, bei dem es mal nicht klappt...

[Diese Nachricht wurde von IIYTII am 16. Aug. 2009 editiert.]

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

Randle
Mitglied
CAD/PLM Consultant


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

Beiträge: 695
Registriert: 12.04.2003

Win10 x64
CATIA V5 R18, R19, R21, R27-29

erstellt am: 16. Aug. 2009 11:18    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 IIYTII 10 Unities + Antwort hilfreich

ich schon wieder,

also wenn du das wiedereinlesen mit ValuateFromString machst, dann hast du meine Ansicht nach mit ValueAsString keinen Fehler gemacht. Du würdest dann den Datentyp einlesen, den du auch ausgelesen hast.
Problematisch wird es dann nur, wenn jemand nach dem Auslesen und den Export nach Excel, in der Excelliste Werte ändert und dabei (aus Versehen) die Einheit vergisst/löscht.
Das könntest du z.B. vermeiden wenn du die Einheit jeweils in eine neue Spalte schreibst. Du musst dann halt beim Auslesen der Parameter Wert und Einheit spliten. Naja un beim Einlesen wieder zusammenbauen.

------------------
MfG
Randle

! It's not a bug, it's a feature !

[Diese Nachricht wurde von Randle am 16. Aug. 2009 editiert.]

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

DanielFr.
Moderator
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: 16. Aug. 2009 11:31    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 IIYTII 10 Unities + Antwort hilfreich

Hallo,

ich hätte noch einen Vorschlag.

Deklariere dir deine Einheiten als Konstanten (z.B. Const LenghtUnit = "mm") und übergebe beim Auslesen nur einen Integer bzw. Single (Gleitkommazahl) Wert. Im Makro machst du dann mit dem Excel Objekt ein benutzerdefiniertes Format auf die Zellen (alle Einheit nimmst du dann die im Makro deklarierte Konstante)

Code:

'Auslesen (nach Excel)
Const myLenghtUnit = "mm"
Excel.Range("A1", "A3").NumberFormat = "0.00 " + Chr(34) + myLenghtUnit + Chr(34)

'Einlesen nach CATIA
Dim myParaValue as String
myParaValue = Excel.Range("A1").Value & myLenghtUnit


So hast du erstens beim Auslesen die Einheit in den Zellen stehen und zweitens kannst du sicher gehen das dir niemand die Einheit versehentlich überschriebt.

Beim Einlesen ließt du dann einfach den Value der Zelle aus und hängst wieder die Konstante ran. Dann bekommst du wieder deinen Wert samt Einheit.

------------------
MFG Daniel

Die KATJA ist halt doch nur ne zickige Französin

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)2023 CAD.de | Impressum | Datenschutz