| |  | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für CATIA & Co. | | |  | KISTERS 3DViewStation optimiert die Lizenzverwaltung für ihre Kunden, eine Pressemitteilung
|
Autor
|
Thema: Fehler bei der Erzeugung von Geo Sets (665 mal gelesen)
|
Christian.O Mitglied Konstrukteur
   
 Beiträge: 1212 Registriert: 17.07.2009
|
erstellt am: 01. Mai. 2010 18:00 <-- editieren / zitieren --> Unities abgeben:         
Servus, ich bin gerade dabei meine Makros von CATScript in catvba umzuschreiben. Beim angehängten Code bekomm ich eine Fehlermeldung (siehe Bild). Wenn ich aber bei der Variablendeklatation nach "Flaechenoperationen" z.B.: einen Buchstaben hinschreibe läuft das Makro ohne Probleme durch. Hab dann die Reihenfolge der Deklarationen geändert und bekamm dann wieder eine Fehlermeldung an der Stelle wo die letzte Deklaration erfolgte. Warum erhalte ich diese Fehlermeldung? Für die Antworten bedanke ich mich schon im voraus.
------------------ Mit freundlichen Grüßen aus Tirol Christian Obholzer Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
zoltan.bekesi Mitglied
 
 Beiträge: 321 Registriert: 22.10.2006 Job: CATIA V5R19 / XP 32bit MS Office 2003 Microstation V8 2004 Edition DELL Precision M6300
|
erstellt am: 01. Mai. 2010 19:51 <-- editieren / zitieren --> Unities abgeben:          Nur für Christian.O
Hallo, das Problem liegt in deiner ersten Zeile: Dim GeoSet, Hilfsgeometrie, Ebenen, Skizzen, Splines, Flaechenoperationen As HybridBodies Alle Variablen bis "Splines" deklariert VBA als Variant, da du hier keinen Typ angegeben hast. "Flaechenoperationen" wird aber als Hybridbodies deklariert, was ein Collection ist und kein einzelner "Geometrical set". Nach Umbenennung der Variable hast du keine Fehlermeldung bekomment, da es nicht mehr der selbe war. Die schnellste Weg dein Problem zu beheben ist "Hybridbody" als Typ anzugeben, dann wird aber nur diese Variable einen richtigen Typ zugewiesen haben. Die schöne Version ist jede Deklaration in eine eigene Zeile zu schreiben, in etwa so: Code: Dim GeoSet as Hybridbody dim Hilfsgeometrie as HybridBody dim Ebenen as HybridBody dim Skizzen as HybridBody dim Splines as HybridBody dim Flaechenoperationen As HybridBody
Ich würde dir zusätzlich Raten, Option Explicit am Anfang der Module zu verwenden. Macht das Leben am Anfang zwar nicht einfacher, versichert aber bessere Ergebnisse langfristig.Gruß, Zoltan Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Christian.O Mitglied Konstrukteur
   
 Beiträge: 1212 Registriert: 17.07.2009
|
erstellt am: 02. Mai. 2010 11:04 <-- editieren / zitieren --> Unities abgeben:         
Servus Zoltan, erstmals danke für die rasche Antwort. Hab mein Makro nochmals umgeschrieben, weil ich nach der neuen Deklaration wieder Fehler bekam. Hab mir hier im Forum nochmals schlau gemacht wie man Geo Sets erstellt und jetzt klappts. Anbei der neue Code. Zitat: Ich würde dir zusätzlich Raten, Option Explicit am Anfang der Module zu verwenden. Macht das Leben am Anfang zwar nicht einfacher, versichert aber bessere Ergebnisse langfristig.
Stimmt die Position von "Option Explicit" im Makro? Edit: Was ich noch Fragen wollte: Muß man alle Variablen in VBA einzeln Deklarieren oder kann man diese wie im CATScript zusammenfassen? Dim Pfad, Projekt, Makro, Makrostart, Makropfad As String Das Makro in dem diese Deklaration drinnen ist funktioniert. Damit gebe ich den Pfad für dein anders Makro an wenn die nötigen Geo Sets fehlen. ------------------ Mit freundlichen Grüßen aus Tirol Christian Obholzer [Diese Nachricht wurde von Christian.O am 02. Mai. 2010 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
zoltan.bekesi Mitglied
 
 Beiträge: 321 Registriert: 22.10.2006 Job: CATIA V5R19 / XP 32bit MS Office 2003 Microstation V8 2004 Edition DELL Precision M6300
|
erstellt am: 03. Mai. 2010 19:29 <-- editieren / zitieren --> Unities abgeben:          Nur für Christian.O
Servus Christian, 1) Option Explicit steht richtig in dein Code. Du darfst Kommentare und Leerzeilen davor haben, aber nichts anderes. 2) Du musst in VBA nichst deklarieren. Wenn du aber Option Explicit verwendest (am Anfang jede Moduls geschrieben), musst du alles deklarieren. Hierzu reicht ein einfacher Dim Variablenname. Damit erreichst du aber, dass VBA für dich alles zuerst als Variant anlegt, d.h. die für den Objekt relevante Properties und Methoden nicht im IntelliSense (pulldown nach drücken einer . an der richtigen Stelle oder Strg+J) erscheinen, da die Variable alles mögliche sein kann. Dies macht den Speicherbedarf auch größer (was aber heute nicht mehr so maßgebend ist). In meinen Augen ist es am saubersten, wenn du alles mit den richtigen Typ deklarierst. Es gibt hier im Forum auch andere Ansätze (siehe Late binding), dies ist aber meine Meinung. Ich habe schon einige Tausen Zeilen hinter mir. VBA zickt manchmal (Automation type not supported oder so), dann einfach den Typ auskommentieren und Programm läuft schön. Ich habe es schon in den vorigen Antwort versucht zu erklären, jetzt versuche ich es noch deutlicher. Deine Deklaration Dim Pfad, Projekt, Makro, Makrostart, Makropfad As String wird von VBA (und in der VB Welt generell) wie folgt interpretiert: Dim Pfad (as variant) dim Projekt (as variant) dim Makro (as variant) dim Makrostart (as variant) dim Makropfad As String Das steht in jeder VB(A) Buch, egal ob Excel oder VB allgemein oder CATIA. Ich hoffe, so wird es verständlicher, was das eigentliche Problem mit deiner alten Makro war. Gruß, Zoltan Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Christian.O Mitglied Konstrukteur
   
 Beiträge: 1212 Registriert: 17.07.2009
|
erstellt am: 03. Mai. 2010 20:04 <-- editieren / zitieren --> Unities abgeben:         
Servus Zoltan, danke nochmals für die Erklärung. Schön langsam dämmerts. Werd mir hier im Forum noch ein paar VBA Scripte anschaun, von den Programmierern die mehr Erfahrung als ich haben. ------------------ Mit freundlichen Grüßen aus Tirol Christian Obholzer Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
 |