Autor
|
Thema: CATScript Funktionen in CATVBA nutzen (5867 mal gelesen)
|
IIYTII Mitglied
Beiträge: 85 Registriert: 30.05.2007 Catia V5 R19 Programmierung unter CATvba
|
erstellt am: 08. Sep. 2009 14:36 <-- editieren / zitieren --> Unities abgeben:
Hallo, ich habe ein Problem und zwar möchte ich CATBSTR, SelectElement etc. in einem CATvba makro einsetzen. Gibt es Möglichkeiten die Befehle von CATScript zu includieren? Benutze derzeit eine schicke Userform und möchte diese mit Benutzerselektionen verbinden. Oder gibt es spezielle Befehle die ich dafür auch in CATvba nutzen kann? Danke 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: 08. Sep. 2009 17:44 <-- editieren / zitieren --> Unities abgeben: Nur für IIYTII
Hallo, was ist das genau Problem? Du kannst eine SelectElement auch in CATvba nutzen. Hierzu darfst du jedoch die Selektion nicht als solche deklarieren sondern als Objekt. Das selbe ist mit dem CATBSTR. Diese wird einfach als Objekt deklariert. Zur Erklärung: Es gibt in Visual Basic Funktionen die nicht oder nur teilweise unterstützt werden. Das liegt in der Regel an der Deklaration des jeweiligen Objekts. Wenn du nun das Objekt auch als Objekt (die Mutter aller Objekte wie Selektion, Document, etc.) deklarierst dann hast du zwar kein IntelliSense (automatische Vervollständigung mehr) dafür funktioniert dein Makro sauber. Dieses "Verfahren" nennt man late binding. Im Gegensatz zum early binding (hier werden die Objekte mit spezifischen Namen deklariert) ist das late binding z.B. versionsunabhängig (beim Erstellen eines Excel-Objekts, etc.). Viele Programmierer programmieren erst mal mit dem early binding (das ist die Faulheit der Progger (da gibt es ja die Autovervollständigung)) und wenn Sie fertig sind und das Makro releasen stellen Sie auf late binding um. ------------------ 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 |
IIYTII Mitglied
Beiträge: 85 Registriert: 30.05.2007 Catia V5 R19 Programmierung unter CATvba
|
erstellt am: 09. Sep. 2009 08:08 <-- editieren / zitieren --> Unities abgeben:
Das genaue Problem ist, dass ich Vorlagen in CATSCript habe und eigentlich grundsätzlich Probleme mit dem Source bekomme. schreibe ich: Code: Eingabe=UserSel.SelectElement2(Test, "Bitte auswählen",False)
Gibt es sofort wieder den nächsten Fehler. UserSel.Clear gibt im Übrigen auch einen Fehler beim compilieren zurück Gesamter Source:
Code: Dim Stat Dim Selfilter(3) Selfilter(0) = "Face" Selfilter(1) = "Shape" Selfilter(2) = "Body" Selfilter(3) = "BiDim" Stat = "Normal" Set oselface = Nothing UserSel.Clear Stat = mysel.SelectElement2(Selfilter, "Für Farbe bitte Fläche/Körper/Shape(Block o.ä.) auswählen! Abbruch mit ESC!", False) If Stat = "Normal" Then Set oselface = mysel.Item(1).Value End If
Was tun?
[Diese Nachricht wurde von IIYTII am 09. Sep. 2009 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Tstone Mitglied Werkzeugkonstrukteur
Beiträge: 163 Registriert: 04.06.2003 Dell Precision 470 Intel Xeon CPU 3,00GHz 2GB Ram Microsoft Windows XP Catia V5 R18 SP6 VB2005
|
erstellt am: 09. Sep. 2009 09:15 <-- editieren / zitieren --> Unities abgeben: Nur für IIYTII
Hallo Toll wäre es wenn du den Text der Fehlermeldung mit angibst. Desweiteren habt ich noch eine Frage zu deinem Code: Ich kann nicht erkennen das usersel und mysel gesetzt(an ein Objekt gebunden werden) wie z.B. Set usersel = CATIA.ActiveDocument.Selection ------------------ Grüße TStone "Respektiere die Macht der Worte, wähle sie mit Bedacht!" Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
IIYTII Mitglied
Beiträge: 85 Registriert: 30.05.2007 Catia V5 R19 Programmierung unter CATvba
|
erstellt am: 09. Sep. 2009 09:53 <-- editieren / zitieren --> Unities abgeben:
Code: Sub main() Dim Was(1) Was(0) = "Pad" Was(1) = "Line" Dim Usersel As Object Set Usersel = CATIA.ActiveDocument.Selection Usersel.Clear Dim E As Object E = Usersel.SelectElement2(Was, "Pad oder Linie wählen!", False) If E = "Normal" Then MsgBox (Usersel.Item(1).Value.Name) Else MsgBox ("Abbruch") End If Usersel.Clear End Sub
Das wäre jetzt der Code 1:1 aus dem Buch von R.Ziethen, mit modifikationen an
Dim Usersel as Object und Dim E as Object Als fehlerhaft wird die Zeile Code: E = Usersel.SelectElement2(Was, "Pad oder Linie wählen!", False)
bezeichnet mit Runtime Error 91 Object Variable or with block variable not set Und im Grunde muss ich bei fast jedem Beispiel erstmal alles in CATvba übersetzen was mich derzeit leider ziemlich ausbremst. Gruß und danke 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: 09. Sep. 2009 17:56 <-- editieren / zitieren --> Unities abgeben: Nur für IIYTII
Hallo, IMHO ist dein letztes Beispiel auch nicht "sauber" programmiert. Versuch mal folgendes: Code:
Sub main() Dim Was(1) Was(0) = "Pad" Was(1) = "Line" Dim Usersel As Object Dim myDoc as Document Set myDoc = CATIA.ActiveDocument Set Usersel = myDoc.Selection Usersel.Clear Dim E As Object E = Usersel.SelectElement2(Was, "Pad oder Linie wählen!", False) If E = "Normal" Then MsgBox (Usersel.Item(1).Value.Name) Else MsgBox ("Abbruch") End If Usersel.Clear End Sub
Hierbei wird erstmal das Objekt myDoc erzeugt und gefüllt. Anschließend wird von diesem Objekt das Selektionsobjekt abgeleitet. Das sollte 100% funktionieren. Zumindestens bei mir und ich habe das schon in so vielen Fällen eingesetzt. Obiges Makro habe ich gerade mir R18 erfolgreich getestet ------------------ 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 |
Tstone Mitglied Werkzeugkonstrukteur
Beiträge: 163 Registriert: 04.06.2003 Dell Precision 470 Intel Xeon CPU 3,00GHz 2GB Ram Microsoft Windows XP Catia V5 R18 SP6 VB2005
|
erstellt am: 10. Sep. 2009 08:56 <-- editieren / zitieren --> Unities abgeben: Nur für IIYTII
Hallo Das Problem liegt in den beiden folgenden Befehlen: Dim E As Object E = Usersel.SelectElement2(Was, "Pad oder Linie wählen!", False) Du deklarierst E als Variable vom Typ "Object". Variablen diesen Typs sind Referenztypen, d.h. sie werden mit einem Verweis auf ein Objekt belegt, aus diesem Grund werden sie in VBA mit dem SET- Befehl gesetzt. Dim E As Object Set E = Usersel.SelectElement2(Was, "Pad oder Linie wählen!", False) ABER SelectElement2 gibt als Rückgabewert ein CATBSTR zurück, das ist eine Variante des String. Somit sollte: Dim E As String E = Usersel.SelectElement2(Was, "Pad oder Linie wählen!", False) funktionieren. Ansonsten: Dim E As Variant E = Usersel.SelectElement2(Was, "Pad oder Linie wählen!", False) funktioniert auf jeden fall.
------------------ Grüße TStone "Respektiere die Macht der Worte, wähle sie mit Bedacht!" Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
IIYTII Mitglied
Beiträge: 85 Registriert: 30.05.2007 Catia V5 R19 Programmierung unter CATvba
|
erstellt am: 10. Sep. 2009 10:05 <-- editieren / zitieren --> Unities abgeben:
|
buecherm83 Mitglied Ingenieur IT Application Software
Beiträge: 78 Registriert: 20.09.2011 SIEMENS NX10 CATIA V5 R26 VB7.1 Tecnomatix Process Designer/Simulate<P>Win7 64bit Office 2016
|
erstellt am: 19. Feb. 2014 10:31 <-- editieren / zitieren --> Unities abgeben: Nur für IIYTII
Hallo habe das gleiche Problem. in CATScript funktioniert es einwandfrei in CATVBA nicht. habe das CATScript wie beschrieben verändert jedoch bekomme ich immer noch eine Fehlermeldung. Wichtig bei meinem Script ist, das ich "SelectElement3" benutzen kann. Code: Sub CATMain() Dim MyDoc Dim MySelection As Object Dim Was(1) Dim E As Object Set MyDoc = CATIA.ActiveDocument Set MySelection = MyDoc.Selection MySelection.Clear Was(0) = "AnyObject" Was(1) = "AnyObject" Set E = MySelection.SelectElement3(Was, "Bitte die Elemente selektieren", False, CATMultiSelTriggWhenUserValidatesSelection, False) If E = "Normal" Then MsgBox (UserSel.Item(1).Value.Name) Else MsgBox "Abbruch" End If End Sub
Beim Durchlauf erscheint schon nicht das Auswahlset. Die Fehlermeldung lautet: Object requiered kann mir jemand weiterhelfen? Grüße Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
imation1999 Mitglied dipl.-ing. Maschinenbau
Beiträge: 276 Registriert: 02.08.2011 Dell Precision T3500 Intel® Xeon® Quad Core NVIDIA Quadro® 5000 Win7 x64 Ultimate CATIA V5 R20 SP2
|
erstellt am: 19. Feb. 2014 10:56 <-- editieren / zitieren --> Unities abgeben: Nur für IIYTII
Hallo, versuch mal so: Code:
Sub CATMain() Dim MyDoc Dim MySelection As Object Dim Was(1) Dim E 'As Object Set MyDoc = CATIA.ActiveDocument Set MySelection = MyDoc.Selection MySelection.Clear Was(0) = "AnyObject" Was(1) = "AnyObject" E = MySelection.SelectElement3(Was, "Bitte die Elemente selektieren", False, CATMultiSelTriggWhenUserValidatesSelection, False) If E = "Normal" Then MsgBox (MySelection.Item(1).Value.Name) Else MsgBox "Abbruch" End IfEnd Sub
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
buecherm83 Mitglied Ingenieur IT Application Software
Beiträge: 78 Registriert: 20.09.2011 SIEMENS NX10 CATIA V5 R26 VB7.1 Tecnomatix Process Designer/Simulate<P>Win7 64bit Office 2016
|
erstellt am: 19. Feb. 2014 11:09 <-- editieren / zitieren --> Unities abgeben: Nur für IIYTII
ok, damit wäre ich einen kleiner Schritt weiter. die Fehlermeldung ist weg. jedoch kann nur ein Element auswählen. Das Auswahlset über "CATMultiSelTriggWhenUserValidatesSelection" erscheint nicht. 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: 19. Feb. 2014 11:39 <-- editieren / zitieren --> Unities abgeben: Nur für IIYTII
|
buecherm83 Mitglied Ingenieur IT Application Software
Beiträge: 78 Registriert: 20.09.2011 SIEMENS NX10 CATIA V5 R26 VB7.1 Tecnomatix Process Designer/Simulate<P>Win7 64bit Office 2016
|
erstellt am: 19. Feb. 2014 11:42 <-- editieren / zitieren --> Unities abgeben: Nur für IIYTII
|