| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für SOLIDWORKS |
| |
| Moderne CAx Entwicklungsmethoden: Generatives Design, Gitternetzstrukturen & MBD, ein Webinar am 11.10.2024
|
Autor
|
Thema: Macro anhalten und manuel fortsetzen (2471 / mal gelesen)
|
4kspeed Mitglied
Beiträge: 91 Registriert: 27.10.2016
|
erstellt am: 08. Jun. 2017 10:29 <-- editieren / zitieren --> Unities abgeben:
Wie kann ich ein Makro anhalten und per Tastenkürzel fortsetzen? Hier ein Beispiel. 3 Zoom Ansichten (in der Zeichnung) Sub main()
Set swApp = _ Application.SldWorks Set Part = swApp.ActiveDoc Part.ViewZoomTo2 1.61428484062526E-02, 0.189996617565803, 0, 5.12796317673755E-02, 0.164106356141817, 0 Part.ViewZoomTo2 0.094174135771501, 0.183293267001821, 0, 0.130731359351257, 0.15605596801058, 0 Part.ViewZoomTo2 0.24137961471948, 8.64905701905415E-02, 0, 0.303846231983413, 5.16282485556224E-02, 0 End Sub Ich brauche die Pausen da ich jede Ansicht bearbeiten möchte, ist das möglich? Von mir aus kann man auch ein Timer einbauen z.b 30 Sekunden, dann kommt die nächste Ansicht usw.
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
HenryV Mitglied Konstrukteur, Engineering
Beiträge: 817 Registriert: 18.05.2005 SolidWorks 2022 x64 SP5.0 Dell Precision 5820 Intel Xeon W-2125 4x4GHz NVIDIA Quadro P2000 5GB 32GB RAM 2x Dell U2412M, 24" TFT Windows 10 Enterprise x64 22H2 Microsoft 365 E5 Microsoft Visual Studio Enterprise 2022
|
erstellt am: 08. Jun. 2017 11:03 <-- editieren / zitieren --> Unities abgeben: Nur für 4kspeed
|
4kspeed Mitglied
Beiträge: 91 Registriert: 27.10.2016
|
erstellt am: 08. Jun. 2017 12:37 <-- editieren / zitieren --> Unities abgeben:
|
Thisoft Mitglied Konstrukteur
Beiträge: 178 Registriert: 10.04.2010 SWX 2018 Standard SP 3 Win10 Professional 64Bit Intel Core i7 7700K 16 GB RAM AMD FirePro W5000 =Beruf SW 2018 Standard SP0 Win10 Professional 64Bit Intel NUC Core i5-6260 12GB RAM Intel Onboard =Privat
|
erstellt am: 08. Jun. 2017 13:16 <-- editieren / zitieren --> Unities abgeben: Nur für 4kspeed
Ich mache das manchmal so: Code: Do swApp.Frame.SetStatusBarText("Mach was...! Enter = Beenden.") System.Threading.Thread.Sleep(1000) swApp.Frame.SetStatusBarText("") Loop Until GetAsyncKeyState(Keys.Enter)
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
4kspeed Mitglied
Beiträge: 91 Registriert: 27.10.2016
|
erstellt am: 08. Jun. 2017 13:59 <-- editieren / zitieren --> Unities abgeben:
|
Thisoft Mitglied Konstrukteur
Beiträge: 178 Registriert: 10.04.2010 SWX 2018 Standard SP 3 Win10 Professional 64Bit Intel Core i7 7700K 16 GB RAM AMD FirePro W5000 =Beruf SW 2018 Standard SP0 Win10 Professional 64Bit Intel NUC Core i5-6260 12GB RAM Intel Onboard =Privat
|
erstellt am: 08. Jun. 2017 14:10 <-- editieren / zitieren --> Unities abgeben: Nur für 4kspeed
Ich vermute mal du musst noch die Funktion "GetAsyncKeyState" deklarieren bzw. importieren: #Region "Win32 imports" Private Declare Function GetAsyncKeyState Lib "User32" (ByVal vKey As Integer) As Short #End Region Sagt meine leicht trübe Glaskugel zu deiner Aussage "funktioniert nicht!" - Mit einer konkreteren Fehlermeldung könnte ich vielleicht auch konkretere Hilfestellung geben Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
4kspeed Mitglied
Beiträge: 91 Registriert: 27.10.2016
|
erstellt am: 09. Jun. 2017 10:13 <-- editieren / zitieren --> Unities abgeben:
VBA ist nicht meine Welt Ich poste mal hier den ganzen Code..
Code: Dim swApp As ObjectDim Part As Object Dim boolstatus As Boolean Dim longstatus As Long, longwarnings As Long Sub main() Set swApp = _ Application.SldWorks Set Part = swApp.ActiveDoc Do swApp.Frame.SetStatusBarText ("") Part.ViewZoomTo2 2.29833512322677E-02, 0.190099749959715, 0, 6.64287214703697E-02, 0.155763892836053, 0 System.Threading.Thread.Sleep (1000) swApp.Frame.SetStatusBarText ("") Part.ViewZoomTo2 0.118716215856383, 0.194312575516218, 0, 0.189867225580949, 0.154290132546149, 0 System.Threading.Thread.Sleep (1000) swApp.Frame.SetStatusBarText ("") Part.ViewZoomTo2 0.209477552181085, 8.65826510303085E-02, 0, 0.275119692877651, 4.16608830283659E-02, 0 Loop Until GetAsyncKeyState(Keys.Enter) End Sub
Ergebniss:
"Fehler beim Kompilieren Sub oder Function nicht definiert" Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Thisoft Mitglied Konstrukteur
Beiträge: 178 Registriert: 10.04.2010 SWX 2018 Standard SP 3 Win10 Professional 64Bit Intel Core i7 7700K 16 GB RAM AMD FirePro W5000 =Beruf SW 2018 Standard SP0 Win10 Professional 64Bit Intel NUC Core i5-6260 12GB RAM Intel Onboard =Privat
|
erstellt am: 09. Jun. 2017 10:31 <-- editieren / zitieren --> Unities abgeben: Nur für 4kspeed
Ooch - ja, ich fürchte Du weißt zwar was du gern hättest verstehst aber noch nicht wirklich was dein per Rekorder erstellter Code da tut. Ich versuch's mal zusammenzubringen... Code:
Private Declare Function GetAsyncKeyState Lib "User32" (ByVal vKey As Integer) As ShortDim swApp As Object Dim Part As Object Dim boolstatus As Boolean Dim longstatus As Long, longwarnings As Long Sub main() Set swApp = _ Application.SldWorks Set Part = swApp.ActiveDoc Part.ViewZoomTo2 2.29833512322677E-02, 0.190099749959715, 0, 6.64287214703697E-02, 0.155763892836053, 0 Do swApp.Frame.SetStatusBarText ("Erste Ansicht bearbeiten! Weiter mit Enter-Taste.") System.Threading.Thread.Sleep (1000) swApp.Frame.SetStatusBarText ("") Loop Until GetAsyncKeyState(Keys.Enter) Part.ViewZoomTo2 0.118716215856383, 0.194312575516218, 0, 0.189867225580949, 0.154290132546149, 0 Do swApp.Frame.SetStatusBarText ("Zweite Ansicht bearbeiten! Weiter mit Enter-Taste.") System.Threading.Thread.Sleep (1000) swApp.Frame.SetStatusBarText ("") Loop Until GetAsyncKeyState(Keys.Enter) Part.ViewZoomTo2 0.209477552181085, 8.65826510303085E-02, 0, 0.275119692877651, 4.16608830283659E-02, 0 Do swApp.Frame.SetStatusBarText ("Dritte Ansicht bearbeiten! Weiter mit Enter-Taste.") System.Threading.Thread.Sleep (1000) swApp.Frame.SetStatusBarText ("") Loop Until GetAsyncKeyState(Keys.Enter) End Sub
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
4kspeed Mitglied
Beiträge: 91 Registriert: 27.10.2016
|
erstellt am: 09. Jun. 2017 10:45 <-- editieren / zitieren --> Unities abgeben:
Hmm geht nicht... "Private Declare Function GetAsyncKeyState Lib "User32" (ByVal vKey As Integer) As Short" ist in roter Schrift Das heißt ich muss nen GetAsyncKeyState Funktion importieren wie du gesagt hast? Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bk.sc Ehrenmitglied V.I.P. h.c. Konstrukteur Sondermaschinenbau
Beiträge: 2795 Registriert: 18.07.2012 -Solid Works 2019 SP5 -Pro Engineer WF 3
|
erstellt am: 09. Jun. 2017 15:38 <-- editieren / zitieren --> Unities abgeben: Nur für 4kspeed
Hallo, bei dir funktioniert das u.a. nicht, da das wohl VB.NET Schnippsel sind und noch nicht für VBA umgeschrieben, SWX VBA erwartet z.B. die Declarationen als PtrSafe, genauso wenig ist VBA die Keys-Enumeration bekannt daher funktioniert Keys.Enter als Vergleiswert auch nicht, genauso wenig ist VBA System.Threading.Thread.Sleep (1000) bekannt. Bevor wir hier aber weiter über das Pausieren des Macros reden, was ist eigentlich dein genaues Ziel, was soll den in dieser "Pause" passieren? Gruß Bernd ------------------ --- Man muß nicht alles wissen, man muß nur wissen wo es steht ---
Staatlich anerkannte Deutschniete [Diese Nachricht wurde von bk.sc am 09. Jun. 2017 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Thisoft Mitglied Konstrukteur
Beiträge: 178 Registriert: 10.04.2010
|
erstellt am: 12. Jun. 2017 08:24 <-- editieren / zitieren --> Unities abgeben: Nur für 4kspeed
Ja, stimmt wohl. 4kspeed arbeitet noch mit VBA. Stand zwar nirgends aber hätte ich sehen können... Hab mein Beispiel mal drauf angepasst: Code: Private Declare PtrSafe Function GetAsyncKeyState Lib "User32" (ByVal vKey As Long) As LongConst VK_RETURN = &HD ' Enter Taste Const VK_RBUTTON = &H2 ' Rechter Mausbutton Const VK_MBUTTON = &H4 ' Mittlerer Mausbutton Dim swApp As Object Dim Part As Object Dim boolstatus As Boolean Dim longstatus As Long, longwarnings As Long Sub main()
Set swApp = Application.SldWorks Set Part = swApp.ActiveDoc Part.ViewZoomTo2 2.29833512322677E-02, 0.190099749959715, 0, 6.64287214703697E-02, 0.155763892836053, 0 Do swApp.Frame.SetStatusBarText ("Erste Ansicht bearbeiten! Weiter mit Enter-Taste.") DoEvents Loop Until GetAsyncKeyState(VK_RETURN) Part.ViewZoomTo2 0.118716215856383, 0.194312575516218, 0, 0.189867225580949, 0.154290132546149, 0 Do swApp.Frame.SetStatusBarText ("Zweite Ansicht bearbeiten! Weiter mit Enter-Taste.") DoEvents Loop Until GetAsyncKeyState(VK_RETURN) Part.ViewZoomTo2 0.209477552181085, 8.65826510303085E-02, 0, 0.275119692877651, 4.16608830283659E-02, 0 Do swApp.Frame.SetStatusBarText ("Dritte Ansicht bearbeiten! Weiter mit Enter-Taste.") DoEvents Loop Until GetAsyncKeyState(VK_RETURN) End Sub
Wobei die Enter-Taste nicht unbedingt die glücklichste Auswahl dafür ist - kann u.U. je nachdem was du in SWX dann gerade gemacht hast auch andere, an dieser Stelle nicht gewollte Funktionen auslösen. Ich nehme ganz gerne RMB für sowas - hab's oben schon mal mit deklariert... Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
4kspeed Mitglied
Beiträge: 91 Registriert: 27.10.2016 SW 2019 SP3.0 Windows 10 Pro 64bit CPU E3-1220 v5, Quadro M2000, 16GbRAM, 3DxWare 10.4.9, LGS 8.91.48
|
erstellt am: 12. Jun. 2017 15:44 <-- editieren / zitieren --> Unities abgeben:
Hallo Thisoft danke ich probiers aus... Hallo bk.sc Ziel ist es in der Pausen alle Deitailansichten zu bemaßen (aufgrund einer Änderung). Weil mein Problem ist es das ich eine Ansicht oft vergesse zu bemaßen, da es sehr viele sind. Mit einer Zoom Makro Ansicht automatisch springen (nach einer Betätigung) finde ich sehr sinnvoll, dann ist man auf den sicheren Weg dies nicht zu vergessen, ich hoffe du verstehst mich.
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
4kspeed Mitglied
Beiträge: 91 Registriert: 27.10.2016
|
erstellt am: 16. Jun. 2017 07:43 <-- editieren / zitieren --> Unities abgeben:
Hallo Thisoft, dein Makro läuft. Manchmal überspringt er die 2. Zoomansicht, Zoomansicht 1 und Zoomansicht 3 klappt gut, wenn dies noch gelöst werden kann wäre das optimal. Aber ich bin trotzdem froh auf die 2 Zoomansichten zuzugreifen (mit Pause dazwischen) danke. :-) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
4kspeed Mitglied
Beiträge: 91 Registriert: 27.10.2016 SW 2019 SP3.0 Windows 10 Pro 64bit CPU E3-1220 v5, Quadro M2000, 16GbRAM, 3DxWare 10.4.9, LGS 8.91.48
|
erstellt am: 23. Jun. 2017 08:10 <-- editieren / zitieren --> Unities abgeben:
Hat sich erledigt... Problem es waren viel zu schnelle Latenzen beim Tastendruck. Habe jetzt eine neue Tastatur mit Anschlagverzögerung (programmierbar) und kann somit alle Schritte anhalten. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Thisoft Mitglied Konstrukteur
Beiträge: 178 Registriert: 10.04.2010
|
erstellt am: 26. Jun. 2017 08:08 <-- editieren / zitieren --> Unities abgeben: Nur für 4kspeed
|