| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für SOLIDWORKS |
| |
| Nahe an industriellen Realbedingungen |
Autor
|
Thema: Makro mit Datei öffnen starten? (4200 mal gelesen)
|
ma.ho Mitglied
Beiträge: 4 Registriert: 20.04.2015
|
erstellt am: 20. Apr. 2015 11:05 <-- editieren / zitieren --> Unities abgeben:
Hallo zusammen, ich habe folgendes Problemchen: Ich möchte über ein python Skript Solidworks 2014 so steuern, das bestimmte Dateien automatisch geöffnet werden, ein Marko ausgeführt wird und sie wieder geschlossen werden. Ich habe es bereits hinbekommen, dass die entsprechenden Dateien geöffnet werden. Auch funktionieren die Markos schon, wenn man sie per Hand ausführt. Aber wie bekomme ich es hin, das SW ein Marko auf externen Befehl automatisch ausführt? /m scheint nicht zu funktionieren (oder ich mache noch was falsch) Gibt es da noch einen anderen Trick? Dank für Eure Hilfe. :-) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
StefanBerlitz Guter-Geist-Moderator IT Admin (CAx)
Beiträge: 8756 Registriert: 02.03.2000 SunZu sagt: Analysiere die Vorteile, die du aus meinem Ratschlag ziehst. Dann gliedere deine Kräfte entsprechend und mache dir außergewöhnliche Taktiken zunutze.
|
erstellt am: 20. Apr. 2015 12:08 <-- editieren / zitieren --> Unities abgeben: Nur für ma.ho
|
ma.ho Mitglied
Beiträge: 4 Registriert: 20.04.2015
|
erstellt am: 21. Apr. 2015 08:28 <-- editieren / zitieren --> Unities abgeben:
Hallo Stefan, vielen Dank für deine schnelle Antwort. Aber ich habe da gleich auch eine Frage dazu: Wenn ich das richtig sehe (korrigier mich bitte, wenn was falsch ist), wird "RunMacro2" genutzt um ein Makro in einer anderen .swp Datei zu starten. Richtig? Aber wie kann ich das erste Makro automatisch starten, ohne das ich nochmal händisch einen Knopf drücken muss? Daran bin ich bisher gescheitert... In meinem Kopf läuft das bisher so: Solidworks öffnen (händisch, weil brauch man ja eh) externes Python Skript starten -> Datei in SW öffnen (geht) -> Makro ausführen, das die Datei in den Exportformaten speichert (Makro funktioniert, wird aber noch nicht automatisch gestartet) -> Datei schließen (Makro funktioniert auch, gleiches Problem wir beim Speichern) -> mit nächster Datei das Ganze wiederholen, bis alle Dateien abgearbeitet sind. Vielleicht verstehe ich ja auch "RunMacro2" falsch und es ist doch genau das was ich suche. Grüße Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
StefanBerlitz Guter-Geist-Moderator IT Admin (CAx)
Beiträge: 8756 Registriert: 02.03.2000 SunZu sagt: Analysiere die Vorteile, die du aus meinem Ratschlag ziehst. Dann gliedere deine Kräfte entsprechend und mache dir außergewöhnliche Taktiken zunutze.
|
erstellt am: 21. Apr. 2015 08:54 <-- editieren / zitieren --> Unities abgeben: Nur für ma.ho
Hallo ma.ho, ich kenne jetzt Python nicht besonders gut, aber ist ja auch nur eine externe Sprache, die offensichtlich SolidWorks fernsteuern kann. Also steuerst du alles aus deinem Python-Skript heraus: 1. Pythonskript starten, darin wird dann 1a. SolidWorks gestartet 1b. Datei in SolidWorks geöffnet (geht ja schon) 1c. Per SldWorks::RunMacro2 dem SolidWorks gesagt, es soll besagtes Makro ausführen 1d. Datei wieder geschlossen 1e. ggf. SolidWorks wieder geschlossen 2. Was auch imemr das Python-Skript jetzt tun soll Es ist eindeutig einfacher, einem Skript die Führung zu überlassen und nicht hin- und herzuwechseln. Und da sich SolidWorks hervorragend automatisieren lässt ... Ciao, Stefan ------------------ Inoffizielle deutsche SolidWorks Hilfeseite http://solidworks.cad.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
ma.ho Mitglied
Beiträge: 4 Registriert: 20.04.2015
|
erstellt am: 21. Apr. 2015 11:40 <-- editieren / zitieren --> Unities abgeben:
Hallo Stefan, danke für deine Tipps. Sie haben mich auf eine Lösung gebracht. Die hat zwar nichts mehr mit Makros zu tun, aber funktioniert: Obwohl python keine offizielle API zu SW hat, kann man eine erzeugen. Und zwar über das windows Sockets. Wenn man dort zu einer laufenden SW Instanz verbindet kann man ganz normal aus SW die API Befehle auch in Python benutzen. Stichworte dazu wäre (falls das mal wer nachbauen will): python2.7 und win32com Man muss nur damit leben, dass das entsprechend nicht offiziell dokumentiert ist. :-/ Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
KMassler Ehrenmitglied V.I.P. h.c. CAD Admin + Mädchen für Alles...
Beiträge: 2675 Registriert: 06.11.2000 SolidWorks Start 1999 ** CSWP 01/2008 ** ------------------ Zuletzt beruflich: - SWX2020 SP5; - SAP/PLM+ECTR; - DriveWorks Pro; - Programmierung: VBA, aktuell Visual Studio 2022/VB.Net ------------------ ab 2024 (privat): Onshape und anderes
|
erstellt am: 22. Apr. 2015 09:50 <-- editieren / zitieren --> Unities abgeben: Nur für ma.ho
Wie Stefan ja schon angedeutet hat: Warum sich mit 2erlei APIs rum schlagen? Kann Python irgendwas (besser), was Solidworks-VBA nicht kann? Wenn dem nicht so ist, mach doch besser gleich alles in VBA. Oder, wenn du die API-Befehle in Python nutzen kannst, wozu dann noch ein VBA-Makro? ------------------ Klaus www.al-ko.com | mein Gästebuch Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
jörg.jwd Ehrenmitglied V.I.P. h.c. CAD-PDM Administrator
Beiträge: 3109 Registriert: 05.11.2003
|
erstellt am: 22. Apr. 2015 10:07 <-- editieren / zitieren --> Unities abgeben: Nur für ma.ho
...muss wohl auch meinen Senf dazu geben Ich gehe mal davon aus dass ma.ho seine Dateien aus einem PDM-System holen will. Ich vermute mal CDB. In dem System checkt man eben die Dateien über ein python-Script aus (Ar...langsam). Haben wir auch lange Zeit so machen müssen. Mittlerweile habe ich bei allen Usern einen Oracel-Clioent installiert und seither holen wir uns die benötigten Dateien direkt mit der SolidWorks-API. Geht rasend schnell da nicht jedes Mal der python-Client gestartet werden muss. ------------------ Grüße Jörg da ich weiß daß ich nichts weiß weiß ich immer noch mehr als die die nicht wissen daß sie nichts wissen (weiß nicht von wem) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
ma.ho Mitglied
Beiträge: 4 Registriert: 20.04.2015
|
erstellt am: 22. Apr. 2015 16:30 <-- editieren / zitieren --> Unities abgeben:
Hallo zusammen, warum ich kein VBA benutze ist ganz einfach: Ich kanns nicht. Bin mit python einfach schneller. Und vorallem funktionieren damit auf jeden Fall die weiteren Operationen sicher (s.u.) Das VBA Makro habe ich dann auch gestrichen, nachdem ich das mit der API unter python hinbekommen habe. Wäre ja auch irgendwie sinnfrei Beides zu verwenden. Und ganz konkret geht es um Fertigungsunterlagen. Ich habe bei Änderungen immer vergessen die Exportdateien (ala STEP etc) zu aktualisieren. Das Gleiche gilt für das Speichern der Drawings als PDF. Beides nimmt mir nun mein Skript ab. Zuzüglich verpackt es die Dateien noch schon in Archive (mit Datum und Projektbezeichnung). Anschließend löscht es unnötige Dateien wieder aus den Verzeichnissen, sodass alles schön aufgeräumt und übersichtlich bleibt. Am längsten bei der ganzen Geschichte dauert das öffnen und schließen der Dateien in SW. Wenn man das noch ohne grafische Oberfläche machen könnte, ginge es sicher rasend schnell. Ich hoffe, das klärt ein wenig den Kontext auf. :-) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
jörg.jwd Ehrenmitglied V.I.P. h.c. CAD-PDM Administrator
Beiträge: 3109 Registriert: 05.11.2003 Win7-64,Win10-64 SWX 2010/11/12/13/14/15/16/17/18,19,20,21,22 Immer das aktuellste SP Autodesk Product Design Suite Standard 2020 DraftSight Énterprise 2021SP2 CIM Database 11.3 32GB RAM. NVIDIA Quadro P1000
|
erstellt am: 23. Apr. 2015 10:21 <-- editieren / zitieren --> Unities abgeben: Nur für ma.ho
Zitat: Original erstellt von ma.ho: Hallo zusammen,warum ich kein VBA benutze ist ganz einfach: Ich kanns nicht.
Hallo ma.ho, 10 Ü's für dafür das du ehrlich zugibst dass du auch mal etwas nicht kannst. Ich kenne kaum jemand der zu seiner "Unwissenheit" steht. Hut ab ------------------ Grüße Jörg da ich weiß daß ich nichts weiß weiß ich immer noch mehr als die die nicht wissen daß sie nichts wissen (weiß nicht von wem) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
KMassler Ehrenmitglied V.I.P. h.c. CAD Admin + Mädchen für Alles...
Beiträge: 2675 Registriert: 06.11.2000 SolidWorks Start 1999 ** CSWP 01/2008 ** ------------------ Zuletzt beruflich: - SWX2020 SP5; - SAP/PLM+ECTR; - DriveWorks Pro; - Programmierung: VBA, aktuell Visual Studio 2022/VB.Net ------------------ ab 2024 (privat): Onshape und anderes
|
erstellt am: 24. Apr. 2015 08:52 <-- editieren / zitieren --> Unities abgeben: Nur für ma.ho
Will auch: - Kann kein Python
- kann kein C#
- kann kein C++
- kann kein Perl
- kann kein Blender
- kann kein Java
- ...
das gibt schon mindestens 60 Us Zumindest kann ich nichts davon richtig, auch wenn ich in der einen oder anderen Sprache schon mal rudimentäre Aufgaben erledigt habe. - ...
- kann nicht Ski fahren
- kann nicht Trompete spielen
- kann nicht Hellsehen
- ...
------------------ Klaus www.al-ko.com | mein Gästebuch Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Christian_W Ehrenmitglied V.I.P. h.c. Konstrukteur (Dipl-Ing)
Beiträge: 3189 Registriert: 04.04.2001 CSWP 12/2015<P>SWX2021sp5 Win10/11 (SWX2016, SWX2012) proAlpha6.2e00/calinkV9 (Tactonworks) (Medusa7, NesCAD2010, solidEdge19)
|
erstellt am: 24. Apr. 2015 09:33 <-- editieren / zitieren --> Unities abgeben: Nur für ma.ho
|
lb-racer Mitglied Techniker
Beiträge: 455 Registriert: 13.12.2005 SolidEdge ST10 MP12 SolidWorks 2023 SP4.0 System: Win10 Pro x64 CPU: i7-10750H Grafik: RTX 3080 16GB Laptop RAM: 32GB
|
erstellt am: 21. Jan. 2022 23:26 <-- editieren / zitieren --> Unities abgeben: Nur für ma.ho
Fraaaage: weiß jemand von Euch Programmiergurus, wie man vom Windows-Explorer aus folgende Aktionen mit *.swp (Makros) ermöglicht ? 1) im VBA-Editor der aktiven SWX-Instanz öffnen 2) in aktiver SWX-Instanz starten 3) in anderem Editor öffnen mfg, Matthias
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
nahe Ehrenmitglied
Beiträge: 1747 Registriert: 18.01.2001 arbeite mit: Dell Precision 7750 i7 2,6 GHz 6 Kerne 32GB RAM 512GB SSD NVIDIA Quadro RTX 4000 ------------------------ SWX-2020 SP5.0 EPDM ---------------- Windows 10 ---------------- VB.net VB VBA ein wenig Swift am Mac
|
erstellt am: 24. Jan. 2022 09:17 <-- editieren / zitieren --> Unities abgeben: Nur für ma.ho
Hallo Matthias, da gibt es, meiner Meinung nach, ein gröberes Problem Da Makros aus mehreren Modulen bestehen können und die Module mehrere Prozeduren enthalten können, musst Du, um das Makro zu starten, wissen, welche Prozedur von welchem Makro Du starten möchtest. Siehe dazu auch "RunMacro2" aus der API-Online-Hilfe Wenn das Makro mal geladen ist, kannst Du den Inhalt mit VBIDE auswerten und über copy/paste (automatisiert) in einen anderen Editor übertragen Dazu musst Du im Makro den Verweis auf "Microsoft Visual Basic for Applications Extensibility...." einfügen
------------------ Grüße Heinz Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
lb-racer Mitglied Techniker
Beiträge: 455 Registriert: 13.12.2005 SolidEdge ST10 MP12 SolidWorks 2023 SP4.0 System: Win10 Pro x64 CPU: i7-10750H Grafik: RTX 3080 16GB Laptop RAM: 32GB
|
erstellt am: 24. Jan. 2022 20:09 <-- editieren / zitieren --> Unities abgeben: Nur für ma.ho
Servus Heinz, Danke für Deine Antwort. Zitat: welche Prozedur von welchem Makro Du starten möchtest
wird nicht standardmäßig "Sub main()" gestartet ? aber das wäre ja sowieso nur für Punkt 2 relevant. ich würde mir gerne das Öffnen von Makros vereinfachen. momentan muß ich zuerst den VBA-Editor von der Makro-Leiste öffnen, und dann von dort durch den Öffnen-Dialog (inkl. durchklickerei durch Ordner).
Zitat: Wenn das Makro mal geladen ist, kannst Du den Inhalt mit VBIDE auswerten und über copy/paste (automatisiert) in einen anderen Editor übertragenDazu musst Du im Makro den Verweis auf "Microsoft Visual Basic for Applications Extensibility...." einfügen
funktioniert dann zB in VisualStudioCode auch das Debuggen mit zB Haltepunkten und Lokalfenster ? mfg, Matthias Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
nahe Ehrenmitglied
Beiträge: 1747 Registriert: 18.01.2001 arbeite mit: Dell Precision 7750 i7 2,6 GHz 6 Kerne 32GB RAM 512GB SSD NVIDIA Quadro RTX 4000 ------------------------ SWX-2020 SP5.0 EPDM ---------------- Windows 10 ---------------- VB.net VB VBA ein wenig Swift am Mac
|
erstellt am: 25. Jan. 2022 07:24 <-- editieren / zitieren --> Unities abgeben: Nur für ma.ho
Hallo Matthias, das mit main stimmt so nicht, wenn Du ein Makro-Modul hast in dem z.B. eine Prozedur "main" und "test" definiert sind und die Prozedur test, ist die letzte in der Reihenfolge, dann wird "test" ausgeführt Außerdem, musst Du bei dem Aufruf mit "RunMacro2" auch das Modul-Namen angeben. Ich glaub nicht, dass man das Makro in VisualStudioCode laufen lassen kann (weiß es aber nicht wirklich, weil ich das nicht habe) Zum Öffnen eines Makros vom Explorer aus, müsstest Du wahrscheinlich, ein eigenes Programm (exe) schreiben, dass Du dann mit der Dateierweiterung "swp" verknüpfst Ich bin mir nicht sicher, ob sich der Aufwand lohnt. ------------------ Grüße Heinz Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |