| |  | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für SOLIDWORKS |
Autor
|
Thema: Funktionen in verschiedenen Makros verwenden (942 mal gelesen)
|
Takeuchi Mitglied Entwicklungsingenieur
 Beiträge: 2 Registriert: 21.04.2020
|
erstellt am: 21. Apr. 2020 21:12 <-- editieren / zitieren --> Unities abgeben:         
Hallo, ich beschäftige mich seit einigen Wochen (beruflich) mit Makro-Programmierung in Solidworks. Mittlerweile habe ich mir eine kleine Sammlung an Funktionen gebastelt, welche ich immer wieder verwende. Daraus resultiert folgende Frage: Wie kann ich (ohne copy&paste) Funktionen in verschiedenen Makros (bzw. Projekten sprich SWP-Files) verwenden? Idealerweise sollen die Funktionen in einer separaten (Text-)Datei liegen und die verschiedenen Makros darauf referenzieren (kein Import, denn hier scheint eine Kopie angefertigt zu werden). Danke im Vorhinein für eure Antworten mfg Stephan 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: 2998 Registriert: 04.04.2001 SWX2021sp5 WIN10 proAlpha6.2e00/calinkV9 (Tactonworks) (Medusa7, NesCAD2010, solidEdge19) CSWP 12/2015
|
erstellt am: 22. Apr. 2020 11:45 <-- editieren / zitieren --> Unities abgeben:          Nur für Takeuchi
Hallo hab ich noch nicht gemacht, hört sich aber sinnvoll an. unter Verweise kannst du nur dlls oder so einbinden, dafür müssten die Tools wohl also wohl irgendwie kompiliert werden (vbnet Makro, c#, ...) ... mit swapp.runmacro2 kannst du nur Programme aufrufen, für den datentransfer müsstest du irgendwie temp-Dateien bemühen oder so ...  Für das importieren spricht, dass man die Makros dann komplett weitergeben kann. Gruß, Christian Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bk.sc Ehrenmitglied V.I.P. h.c. Konstrukteur Sondermaschinenbau

 Beiträge: 2770 Registriert: 18.07.2012 -Solid Works 2019 SP5 -Pro Engineer WF 3
|
erstellt am: 22. Apr. 2020 12:59 <-- editieren / zitieren --> Unities abgeben:          Nur für Takeuchi
Hallo, alternativ zur Verwendung von DLL's (was eigentlich der übliche Weg ist) klappt evtl. ja das Importieren von Modulen (.bas) wie hier entlang)nicht nur in VBE sondern auch aus einem SWX Macro heraus und du kannst dir quasi ein "Update Macro" ertsellen, dass dir die Module dann ersetzt. Gruß Bernd ------------------ --- Man muß nicht alles wissen, man muß nur wissen wo es steht --- Staatlich anerkannte Deutschniete  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: 2998 Registriert: 04.04.2001 SWX2021sp5 WIN10 proAlpha6.2e00/calinkV9 (Tactonworks) (Medusa7, NesCAD2010, solidEdge19) CSWP 12/2015
|
erstellt am: 22. Apr. 2020 15:55 <-- editieren / zitieren --> Unities abgeben:          Nur für Takeuchi
Zitat: Original erstellt von bk.sc: ... ein "Update Macro" ertsellen, dass dir die Module dann ersetzt...
Hallo Bernd, das find ich eigentlich eine recht coole Idee  voll funktionsfähig, wenn es kein update findet, aber auf aktuellem Stand, wenn der Updatepfad was neues bereithält. Muss ich mir merken für wenn ich mal Zeit hab ...  Gruß, Christian
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Takeuchi Mitglied Entwicklungsingenieur
 Beiträge: 2 Registriert: 21.04.2020
|
erstellt am: 29. Apr. 2020 13:03 <-- editieren / zitieren --> Unities abgeben:         
Hallo, Danke für die zahlreichen Inputs. Ich habe mich die letzten Tage nochmal intensiver mit dem Thema beschäftigt und bin zu einer für mich akzeptablen Lösung gelangt. Vorab folgen einige Überlegungen: - Das updaten mittels Import von Modulen zur Laufzeit klappt nicht, da folglich nicht sauber kompiliert wird. - Mir ist keine Methode bekannt, mit welcher man SWP-Dateien aus einem Makro heraus auf Basis ihres Dateipfads öffnen kann. - Das "händische" Öffnen der Projekte mittels "Makro bearbeiten" in SWX ist unpraktikabel. - Den Einsatz weiterer Programme oder gar Programmiersprachen wollte ich vermeiden. Unter Berücksichtigung dieser Überlegungen entstand heute folgender Prototyp eines UpdateMakros: Code:
Option ExplicitConst cStrUpdateSub As String = "UpdateDummy" Const cStrUpdateModule As String = "LastLibrary" Sub main() Dim swApp As SldWorks.SldWorks Dim oModule As Object Dim oProject As Object Dim bUpdate As Boolean Dim strReport As String Dim strDirectory As String Dim strFile As String Dim strProject As String Dim strModule As String Dim nError As Long Set swApp = Application.SldWorks ' get directory from macro strDirectory = Left(Application.VBE.ActiveVBProject.FileName, InStrRev(Application.VBE.ActiveVBProject.FileName, "\")) ' run through files in directory strFile = Dir(strDirectory) Do Until strFile = "" ' if file is a SWX -macro, check for cStrUpdateSub by trying to run it If Right(strFile, 4) = ".swp" Then strProject = Left(strFile, InStrRev(strFile, ".") - 1) strModule = strProject + "1" bUpdate = swApp.RunMacro2(strDirectory + strFile, strModule, cStrUpdateSub, swRunMacroDefault, nError) If bUpdate Then Set oProject = Application.VBE.VBProjects(strProject) For Each oModule In oProject.VBComponents If oModule.Name = cStrUpdateModule Then oProject.VBComponents.Remove oProject.VBComponents(cStrUpdateModule) oProject.VBComponents.Import strDirectory + cStrUpdateModule + ".bas" strReport = strReport & vbCrLf & oProject.Name End If Next ElseIf strProject <> "UpdateMacros" Then ' unload macros without cStrUpdateSub swApp.RunMacro2 strDirectory + strFile, strModule, cStrUpdateSub, swRunMacroUnloadAfterRun, nError End If End If strFile = Dir Loop MsgBox "Updated macros: " + vbCrLf + strReport End Sub
Ein upzudatendes Projekt "XYZ" muss im Modul "XYZ1" folgenden Code enthalten:
Code:
Sub UpdateDummy() End Sub
Das UpdateMakro sucht sämtliche Projekte im gleichen Ordner, welche dieses Voraussetzungen erfüllen und erneuert (sofern genutzt) das Modul "LastLibrary" durch Import der Datei "LastLibrary.bas". Die Vorgaben bzgl. gleicher Ordner und Namensgebung sind natürlich adaptierbar. Das Makro wird aus dem Editor heraus aufgerufen. Das speichern der Änderungen in den einzelnen Projekten erfolgt bewusst manuell. Ich denke noch drüber nach das UpdateMakro gleichzeitig als Container für die Module zu verwenden (sprich aus diesem heraus erst zu exportieren). mfg Stephan [Diese Nachricht wurde von Takeuchi am 29. Apr. 2020 editiert.] [Diese Nachricht wurde von Takeuchi am 29. Apr. 2020 editiert.] [Diese Nachricht wurde von Takeuchi am 29. Apr. 2020 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
 |