Autor
|
Thema: Funktion aus Makro heraus starten (3707 mal gelesen)
|
Pausenbrot Mitglied
Beiträge: 20 Registriert: 24.10.2007
|
erstellt am: 20. Nov. 2009 15:03 <-- editieren / zitieren --> Unities abgeben:
Hallo, gibt es ein Befehl, mit dem ich eine Funktion aus einem Makro heraus starten kann ohne die Fkt. mühsam im VBA nachzuprogrammieren? Nach Muster: - Makro starten - Fkt.startet ... Fkt. beendet - Makro läuft weiter Gruß das Pausenbrot
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Mörchen Ehrenmitglied V.I.P. h.c. CAD-Trainerin (CATIA V5)
Beiträge: 3830 Registriert: 14.03.2007 Release 19 SP2
|
erstellt am: 20. Nov. 2009 15:05 <-- editieren / zitieren --> Unities abgeben: Nur für Pausenbrot
|
Pausenbrot Mitglied
Beiträge: 20 Registriert: 24.10.2007
|
erstellt am: 20. Nov. 2009 15:13 <-- editieren / zitieren --> Unities abgeben:
|
pittyplatsh Mitglied
Beiträge: 62 Registriert: 27.12.2008 CATIA V5 R16 SP3
|
erstellt am: 20. Nov. 2009 15:43 <-- editieren / zitieren --> Unities abgeben: Nur für Pausenbrot
Kommt drauf an wie die Anwendung sein soll: Du kannst natürlich sämtliche Tools von Catia per Macro aufrufen über
Code: CATIA.StartCommand("Tool")
In den Anführungszeichen steht dann der Name des Tools, welches gestartet werden soll. Damit wird nur das Tool gestartet und der User muss eventuelle weitere Eingaben wie gewohnt vornehmen. Die Namen sämtlicher Tools sind meines Wissens nicht dokumentiert und müssen ein wenig durch probieren, überlegen herausgefunden oder in den Installationsdateien gesucht werden. Du kannst aber auch Operationen komplett durch ein Macro übernehmen lassen (hier wird aber leider nicht alles unterstützt, jedoch ist es mit 90% oder mehr möglich). Was für eine Funkion möchtest du denn auslösen lassen? Liebe Grüße, pitty [Diese Nachricht wurde von pittyplatsh am 20. Nov. 2009 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
V5Playaz Mitglied Dipl.-Ing (BA)
Beiträge: 447 Registriert: 12.07.2005 DELL PRECISION 390 3,25 GB RAM WIN XP PRO SP2 CATIA V5 R16-19 Delmia V5 R19 VB6, VB2008 Adobe Acrobat 9 Pro Extended
|
erstellt am: 20. Nov. 2009 15:44 <-- editieren / zitieren --> Unities abgeben: Nur für Pausenbrot
|
Pausenbrot Mitglied
Beiträge: 20 Registriert: 24.10.2007
|
erstellt am: 20. Nov. 2009 15:55 <-- editieren / zitieren --> Unities abgeben:
Danke, so klapp dass schon mal. Jetzt noch der Haken: Die Catia-Fkt. wird gestartet aber das Makro läuft im Code weiter. Die Catia-Fkt. ist erst nutzbar, nachdem das Makro beendet ist. Kann man Catia zum warten zwingen? Gruß Pausenbrot. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
V5Playaz Mitglied Dipl.-Ing (BA)
Beiträge: 447 Registriert: 12.07.2005 DELL PRECISION 390 3,25 GB RAM WIN XP PRO SP2 CATIA V5 R16-19 Delmia V5 R19 VB6, VB2008 Adobe Acrobat 9 Pro Extended
|
erstellt am: 20. Nov. 2009 16:07 <-- editieren / zitieren --> Unities abgeben: Nur für Pausenbrot
Auch die sleep-Funktion findest du hier im Forum. Welche Funktion willst du denn nutzen? Eventuell kann man diese Funktion auch direkt über ein Makro bedienen. Alternativ externes Programm (außerhalb von CATIA, z.B. VB2008) erstellen. grüße Dominik Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
pittyplatsh Mitglied
Beiträge: 62 Registriert: 27.12.2008 CATIA V5 R16 SP3
|
erstellt am: 20. Nov. 2009 16:08 <-- editieren / zitieren --> Unities abgeben: Nur für Pausenbrot
Habe mich leider damit in der Makro-Programmierung noch nicht viel beschäftigt. Mir schwirren aber 2 Gedanken im Kopf rum: 1) Ein Tool gibt sicherlich an CATIA einen Befehl zurück dass dieses weiterarbeiten kann. Vlt kann man diesen Befehl ebenfalls nutzen? 2) Du könntest eine MsgBox aufploppen lassen die dir jedoch erlaubt im Hintergrund weiterzuarbeiten (Gibt es im VisualBasic eine Eigenschaft dafür). Nach ausgeführter Funktion wird diese noch mit OK bestätigt und weiter gehts im Text. Oder aber wie schon beschrieben die Ausführung vom Makro übernehmen lassen und über Inputs und UserSelections die Werte abfragen. Liebe Grüße, pitty Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
RSchulz Moderator² Head of CAD, Content & Collaboration / IT-Manager
Beiträge: 5541 Registriert: 12.04.2007 @Work Lenovo P510 Xeon E5-1630v4 64GB DDR4 Quadro P2000 256GB PCIe SSD 512GB SSD SmarTeam V5-6 R2016 Sp04 CATIA V5-6 R2016 Sp05 E3.Series V2019 Altium Designer/Concord 19 Win 10 Pro x64
|
erstellt am: 20. Nov. 2009 16:54 <-- editieren / zitieren --> Unities abgeben: Nur für Pausenbrot
Hallo zusammen, Zitat: Original erstellt von pittyplatsh:
Du kannst aber auch Operationen komplett durch ein Macro übernehmen lassen (hier wird aber leider nicht alles unterstützt, jedoch ist es mit 90% oder mehr möglich).
Ganz ehrlich... Wenn überhaupt sind es 10% oder weniger! ich pers. fluche schon etwas länger, da man mit vba für CATIA leider immer Auswege finden muss und teilweise Sachen, die man einfach aus dem .Net kennt, nur durch tricksen und hoch komplexe eigene Programmierungen lösen kann. Zitat: Original erstellt von V5Playaz:
Auch die sleep-Funktion findest du hier im Forum.Welche Funktion willst du denn nutzen? Eventuell kann man diese Funktion auch direkt über ein Makro bedienen. Alternativ externes Programm (außerhalb von CATIA, z.B. VB2008) erstellen. grüße Dominik
Das würde ihn nicht weiterbringen, da Sleep das gesamte Programm schlafen legt und damit auch CATIA und das Makro! Außerdem lassen sich Fenster, die man unter vba nicht kontrollieren kann, noch schlechter außerhalb kontrollieren. Zitat: Original erstellt von pittyplatsh: Habe mich leider damit in der Makro-Programmierung noch nicht viel beschäftigt. Mir schwirren aber 2 Gedanken im Kopf rum:1) Ein Tool gibt sicherlich an CATIA einen Befehl zurück dass dieses weiterarbeiten kann. Vlt kann man diesen Befehl ebenfalls nutzen? 2) Du könntest eine MsgBox aufploppen lassen die dir jedoch erlaubt im Hintergrund weiterzuarbeiten (Gibt es im VisualBasic eine Eigenschaft dafür). Nach ausgeführter Funktion wird diese noch mit OK bestätigt und weiter gehts im Text.
zu 1.) Die Tools geben nichts zurück bzw. nur in den seltensten Fällen, werden Ereignisse generiert bzw. kann man auf Ereignisse reagieren. zu 2.) Naja und wenn jemand Enter drückt? Oder ausversehen bestätigt? Das ist in meinen Augen keine saubere Lösung. Hier mein Vorschlag: Du musst warten, bis die Funktion (Das Fenster) geöffnet ist und dann evtl. etwas verarbeiten und dann wiederum warten, bis das Fenster zu ist. Beispielcode:
Code:
Option ExplicitPrivate Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long Sub CATMain() Dim hWndTmp1 As Long Dim FuncTitle As String FuncTitle = "FensterÜberschrift" 'Der Name des Fenster ist immer der Inhalt, der Oben in der Leiste steht. Allerdings ist diese Sprachabhängig! 'Schleife, die solange läuft, bis das Fenster offen ist Do 'Code für die Bearbeitung hWndTmp1 = FindWindow(vbNullString, FuncTitle) DoEvents Loop Until hWndTmp1 <> 0 'Schleife, die solange läuft, bis das Fenster wieder geschlossen ist Do 'Code für die Bearbeitung hWndTmp1 = FindWindow(vbNullString, FuncTitle) DoEvents Loop Until hWndTmp1 = 0 End Sub
HTH ------------------ MFG Rick Schulz Nettiquette (CAD.de) - Was ist die Systeminfo? - Wie man Fragen richtig stellt. - Unities Konfuzius sprach: "Wer sich das Alte noch einmal vor Augen führt, um das Neue zu verstehen, der kann anderen ein Lehrer sein." Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Pausenbrot Mitglied
Beiträge: 20 Registriert: 24.10.2007
|
erstellt am: 24. Nov. 2009 17:44 <-- editieren / zitieren --> Unities abgeben:
Hallo Herr Schulz die Lösung funktioniert und ist mal wieder recht 'tricky'. Was mir auffiel: Das Fenster welches ich abfange, öffnet sich zu langsam. Also der MakroCode ist schon wieder aus der Schleife raus. Wie kann man das Makro eine Sekunde verharren lassen bevor es in die Schleife rennt? Gruß das Pausenbrot Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Pausenbrot Mitglied
Beiträge: 20 Registriert: 24.10.2007
|
erstellt am: 24. Nov. 2009 19:01 <-- editieren / zitieren --> Unities abgeben:
Ist ja klar. Jetzt ist mir ein Licht aufgegangen: Warten bis Fenster aufgegangen. Weiter wenn Fenster geschlossen. Stand ja oben schon alles beschrieben. Also nix mit Makro verzögern. Gruß v. Pausenbrot Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
ThomasJay Mitglied Dipl-Ing
Beiträge: 159 Registriert: 19.04.2011 CATIA V5 R19
|
erstellt am: 28. Apr. 2011 14:20 <-- editieren / zitieren --> Unities abgeben: Nur für Pausenbrot
wäre es möglich eine Geometrisches Set zu erzeugen bevor man die Funktion startet, sodass das Ergebnis in diesem neue und leeren Set abgelgegt wird, und dass ich danach mit einer Bedingung fortfahre die true wird, wenn dieses Set ein oder mehrere Elemente enthält? Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |