Hot News aus dem CAD.de-Newsletter:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  SolidWorks
  Funktionen in verschiedenen Makros verwenden

Antwort erstellen  Neues Thema erstellen
CAD.de Login | Logout | Profil | Profil bearbeiten | Registrieren | Voreinstellungen | Hilfe | Suchen

Anzeige:

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen nächster neuer Beitrag | nächster älterer Beitrag
Autor Thema:   Funktionen in verschiedenen Makros verwenden (342 mal gelesen)
Takeuchi
Mitglied
Entwicklungsingenieur

Sehen Sie sich das Profil von Takeuchi an!   Senden Sie eine Private Message an Takeuchi  Schreiben Sie einen Gästebucheintrag für Takeuchi

Beiträge: 2
Registriert: 21.04.2020

erstellt am: 21. Apr. 2020 21:12    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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)


Sehen Sie sich das Profil von Christian_W an!   Senden Sie eine Private Message an Christian_W  Schreiben Sie einen Gästebucheintrag für Christian_W

Beiträge: 2483
Registriert: 04.04.2001

SWX2016sp5 WIN10
(SWX2019 testweise)
proAlpha6.2e00/calinkV9
(Tactonworks)
(Medusa7, NesCAD2010,
solidEdge19) CSWP 12/2015

erstellt am: 22. Apr. 2020 11:45    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Takeuchi 10 Unities + Antwort hilfreich

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



Sehen Sie sich das Profil von bk.sc an!   Senden Sie eine Private Message an bk.sc  Schreiben Sie einen Gästebucheintrag für bk.sc

Beiträge: 2403
Registriert: 18.07.2012

-Solid Works 2019 SP3
-Pro Engineer WF 3

erstellt am: 22. Apr. 2020 12:59    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Takeuchi 10 Unities + Antwort hilfreich

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)


Sehen Sie sich das Profil von Christian_W an!   Senden Sie eine Private Message an Christian_W  Schreiben Sie einen Gästebucheintrag für Christian_W

Beiträge: 2483
Registriert: 04.04.2001

SWX2016sp5 WIN10
(SWX2019 testweise)
proAlpha6.2e00/calinkV9
(Tactonworks)
(Medusa7, NesCAD2010,
solidEdge19) CSWP 12/2015

erstellt am: 22. Apr. 2020 15:55    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Takeuchi 10 Unities + Antwort hilfreich

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

Sehen Sie sich das Profil von Takeuchi an!   Senden Sie eine Private Message an Takeuchi  Schreiben Sie einen Gästebucheintrag für Takeuchi

Beiträge: 2
Registriert: 21.04.2020

erstellt am: 29. Apr. 2020 13:03    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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 Explicit

Const 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 >>)

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen

nächster neuerer Beitrag | nächster älterer Beitrag
Antwort erstellen


Diesen Beitrag mit Lesezeichen versehen ... | Nach anderen Beiträgen suchen | CAD.de-Newsletter

Administrative Optionen: Beitrag schliessen | Archivieren/Bewegen | Beitrag melden!

Fragen und Anregungen: Kritik-Forum | Neues aus der Community: Community-Forum

(c)2020 CAD.de | Impressum | Datenschutz