Autor
|
Thema: Kann das ein Makro? (1194 mal gelesen)
|
Meeper Mitglied
Beiträge: 15 Registriert: 08.08.2008
|
erstellt am: 07. Aug. 2009 14:04 <-- editieren / zitieren --> Unities abgeben:
Hallo! Ich arbeite mich gerade in die Thematik Makros ein und habe auch schon ein Buch von R. Ziethen "Catia V5 Makroprogrammierung mit Visual Basic Script" durchgeackert. Die Forensuche habe ich auch schon bemüht. Ich will natürlich nicht, dass mir hier einer Makros schreibt, ich will nur wissen ob sich meine Problematik auch mit einem Makro lösen lässt. Los geht's: In einer Konstruktionstabelle (Excel) sind viele verschiedene Konfigurationen eines L-Winkels hinterlegt (unterschiedliche Schenkellängen und Radien). Über einen Parameter in CATIA kann ich bequem die Konfiguration (entspricht einer Zeile in Excel) in der Konstruktionstabelle anwählen. Das soll dann das Makro machen, also alle Konfigurationen 1 bis 100 durchgehen. An jeder Konfiguration des L-Winkels werden zwei Längen gemessen. Mit "Messung beibehalten" steht der Wert im Strukturbaum und wird auch korrekt geupdatet, wenn sich die Konfiguration ändert. Diese zei Längen sollen dann in die Konstruktionstabelle geschrieben werden, in die Zeile der jeweiligen Konfiguration (also dahinter). Nun meine Frage: kann ich das umsetzen? Mir geht es erstmal nicht um das WIE, sondern nur um das OB? Nicht dass ich mich jetzt in irgendwas verrenne und am Ende hat es keinen Sinn. Habt Ihr noch Literaturtipps für mich, die mir bei o.g. Problem helfen können? Das Buch von Ziehten ist zwar ganz nett, deckt aber nicht das Problem der Kommunikation mit anderen Programmen wie Excel ab.
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Jens Hansen Mitglied Senior Consult
Beiträge: 1055 Registriert: 05.08.2000 Win7 CATIA V5 R19 VB.Net C#
|
erstellt am: 07. Aug. 2009 14:09 <-- editieren / zitieren --> Unities abgeben: Nur für Meeper
|
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: 07. Aug. 2009 14:56 <-- editieren / zitieren --> Unities abgeben: Nur für Meeper
Hallo, ist überhaupt kein Problem da musst du dir keine Gedanken machen das an dem Script irgendwas überhaupt nicht funktioniert. Das ganze kannst du in CATvba schreiben (externe Verweise auf Excel (Excel.exe)). Dann kannst du alle Funktion, Klassen, etc. aus Excel in CATIA nutzen. Um das Layout festzulegen kannst du dir mit dem Makrorekorder in Excel den Code aufzeichnen und dann mit leichten Anpassungen in den CATvba-Script übernehmen. Es gibt aber zwei Sache bei denen du unbedingt aufpassen solltest. 1. Wenn du dir in CATVba ein Excel Objekt erzeugst, dieses Verwendest und anschließend mit "myApp.Quit" (bzw. myApp = Nothing) wieder zerstören willst funktioniert das nicht (ein BUG oder soll ich lieber sagen ein Feature ) D.h. wenn du einmal ein Excel-Objekt erzeugt hast bleibt der Task im Taskmanager verfügbar obwohl er geschlossen sein sollte (durch das Quit). Hierzu gibt es aber eine Abhilfe über die API (siehe folgenden Code) 2. Der Makrorecorder aus Excel zeichnet immer ein select auf (z.B. Range("A1:B6").select....selection.machirgendwas). Das verbraucht nur unnötig Ressourcen. Das Select brauchst du in den wenigsten Fällen. In der Regel kannst du die Zelle bzw. den Bereich sofort ansprechen und brauchst das select nicht. CODE ZUM KILLEN DES EXCEL OBJEKTS Code:
'API Zugriff auf Modulebene Private Declare Function GetWindowThreadProcessId Lib "user32" (ByVal hWnd As Integer, ByRef lpdwProcessId As IntPtr) As IntPtr 'Ecxel beenden Private Sub KillExcel() 'Objekte freigeben myWorkSheet = Nothing myPrintWorkbook = Nothing 'Excel beenden Dim processId As IntPtr 'Zugriff auf die API um die ProzessID von Excel auszulesen GetWindowThreadProcessId(myExcel.Hwnd, processId) 'Excelprozess übernehmen Dim excelProcess As Process = Process.GetProcessById(processId.ToInt32()) 'Den Prozess zerstören ohne das irgendwas anderes mitgerissen wird excelProcess.Kill() End Sub
ANMERKUNG Das ist eine Auszug aus einem VB.NET Programm es sind also noch kleine Anpassungen zu tätigen um den Code in CATvba nutzen zu können (z.B. SET-Anweisungen)
------------------ MFG Daniel Die KATJA ist halt doch nur ne zickige Französin Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
tomtom1972 Mitglied dipl ing maschinenbau
Beiträge: 605 Registriert: 22.03.2005 NVidia Quadro K4000 Intel Xeon E5-1620, 64GB RAM Windows10 64bit R30 <= CATIA V5 > =R19
|
erstellt am: 07. Aug. 2009 15:02 <-- editieren / zitieren --> Unities abgeben: Nur für Meeper
Hallo Daniel, ist das ein spezielle Problem von .net? Ich erzeuge in VB6 ständig Excel-Objekte und "beseitige" die dann wieder mit .quit, ohne das im Task eine excel.exe übrig bleibt?? Gruß ------------------ tomtom1972 Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Meeper Mitglied
Beiträge: 15 Registriert: 08.08.2008
|
erstellt am: 07. Aug. 2009 15:09 <-- editieren / zitieren --> Unities abgeben:
|
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: 07. Aug. 2009 15:33 <-- editieren / zitieren --> Unities abgeben: Nur für Meeper
Hallo, @Tom: Ich hab hier gerade ein VB6 Projekt liegen das den Task auch nicht sauber schließen kann. Es funktioniert mal und mal geht es nicht... . Naja ich hab mikr angewöhnt das Excel Objekt so zu zerstören den das funktioniert immer ------------------ 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 >>)
|