| | | Materialien für den 3D-Druck im Hochtemperaturbereich, eine Pressemitteilung
|
Autor
|
Thema: VBA Solidworks Makro Programmierung (415 / mal gelesen)
|
2-Mars Mitglied B.Sc. Maschinenbau
Beiträge: 14 Registriert: 02.06.2019 Catia V5 6R2014 Autodesk Inventor 2019
|
erstellt am: 19. Jan. 2024 22:44 <-- editieren / zitieren --> Unities abgeben:
Hallo Forum (und ein frohes neues Jahr...) ich habe eine Frage als Greenhorn Makroprogrammierer. Folgende Situation: Ich habe bereits ein Makro erstellt, das nach dem Aktivieren eine Userform öffnet. In dieser kann der User mittels einiger Checkboxen, einer Combobox und einer Optionsbox ein paar Einstellungen vornehmen und das Makro mittels eines Command Button ausführen. Das klappt auch alles wunderbar und ich habe eine ganze Menge über VBA in Verbindung mit Solidworks gelernt Das Einzige was dem Ganzen die Kirsche aufsetzen würde, wäre wenn es einen einfachen Weg gäbe die Userform Einstellungen des User zu speichern. Soll heißen, dass wenn einmal die favorisierten Einstellungen gefunden sind, soll er diese nicht immer wieder neu anklicken müssen. Gibt es dafür einen einfachen Weg? Ich habe schon ein wenig recherchiert.. Es gibt mehrere Möglichkeiten das zu erreichen wie z.B. eine Ini Datei oder das Speichern in der Registry usw.. Doch was ist der beste Weg? Bisher wirkt es sehr umständlich, das mit VBA zu erreichen (in VBA.net scheint es mehr Boardmittel zu geben ) Ich wäre für jeden Tipp sehr dankbar dieses doch in der Theorie recht simples Ziel zu erreichen
------------------ Normal ist auch langweilig. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Oberli Mike Ehrenmitglied V.I.P. h.c. Dipl. Maschinen Ing. / Supporter
Beiträge: 3873 Registriert: 29.09.2004 SolidWorks 2024 SP0.1
|
erstellt am: 22. Jan. 2024 11:50 <-- editieren / zitieren --> Unities abgeben: Nur für 2-Mars
|
2-Mars Mitglied B.Sc. Maschinenbau
Beiträge: 14 Registriert: 02.06.2019 Catia V5 6R2014 Autodesk Inventor 2019
|
erstellt am: 23. Jan. 2024 20:47 <-- editieren / zitieren --> Unities abgeben:
Stimmt, es wäre eine Idee bestimmte Default Werte der Variablen in eine externe Datei auszulagern. Sobald der User das Makro mit dem Command Button ausführt, werden die Werte dann überschreiben, sodass auf diese Weise gespeichert wird. Leider weiß ich noch nicht wie eine solche Datei erstellt wird. Da wären Code Beispiele hilfreich. ------------------ Normal ist auch langweilig. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Oberli Mike Ehrenmitglied V.I.P. h.c. Dipl. Maschinen Ing. / Supporter
Beiträge: 3873 Registriert: 29.09.2004 SolidWorks 2024 SP0.1
|
erstellt am: 23. Jan. 2024 21:21 <-- editieren / zitieren --> Unities abgeben: Nur für 2-Mars
Hier ein Beispiel in Excel. **** Code (Variablendeklaration ist nicht mein Ding) **** Sub datenausgabe() dateiname = Range("A1") & "\ausgabe.txt" Open dateiname For Output As #1 For i = 1 To 100 Print #1, "Zeile " & i Next i Close #1 End Sub **** Code (Variablendeklaration ist nicht mein Ding) **** So was findet man im Internet leicht mit Suchbegriffen wie VBA in txt File schreiben Gruss Mike Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
KlaK Ehrenmitglied V.I.P. h.c. Dipl. Ing. Vermessung, CAD- und Netz-Admin
Beiträge: 2812 Registriert: 02.05.2006 AutoCAD LandDesktop R2 bis 2004 Civil 3D 2005 - 2023 Plateia, Canalis Visual Basic
|
erstellt am: 24. Jan. 2024 13:02 <-- editieren / zitieren --> Unities abgeben: Nur für 2-Mars
Hallo 2-Mars, Zitat: Original erstellt von 2-Mars: Das Einzige was dem Ganzen die Kirsche aufsetzen würde, wäre wenn es einen einfachen Weg gäbe die Userform Einstellungen des User zu speichern. Soll heißen, dass wenn einmal die favorisierten Einstellungen gefunden sind, soll er diese nicht immer wieder neu anklicken müssen. Gibt es dafür einen einfachen Weg? Ich habe schon ein wenig recherchiert.. Es gibt mehrere Möglichkeiten das zu erreichen wie z.B. eine Ini Datei oder das Speichern in der Registry usw.. Doch was ist der beste Weg? Bisher wirkt es sehr umständlich, das mit VBA zu erreichen (in VBA.net scheint es mehr Boardmittel zu geben )
Ich sehe jetzt nicht wirklich den großen Unterschied zwischen VBA und VB.net, mag sein dass es in .net einfacher ist eine Registry-Class einzubinden, in VBA mußt Du Dir entweder irgendwo suchen oder selber schreiben. Das Speichern von Vorgabewerte in eine Datei kenne ich schon seit meinen Programmieranfängen (1985), das war damals Usus. Speichern in der Registry kam erst deutlich später. Während früher alles im Programm- oder Datenverzeichnis abgelegt wurde, ist man inzwischen dazu übergegangen zunächst im User-verzeichnis danach zu suchen (User\(Name)\AppData\Local\(Programmname)). Wichtig wäre bei ini oder def Dateien in der ersten Zeile eine Versionsnummer zu hinterlegen, damit kann man Programmerweiterungen / ~änderungen abfangen. Und natürlich ist eine gute Dokumentation wichtig. Im Idealfall schreibst du hinter den Wert noch die Bedeutung. Grüße Klaus 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: 24. Jan. 2024 18:01 <-- editieren / zitieren --> Unities abgeben: Nur für 2-Mars
Hallo 2-Mars Ich würde das auch per ini-Datei machen. Hier ein Beispiel (abgeleitet von hier https://www.vbarchiv.net/tipps/tipp_138-verwalten-von-ini-dateien.html): - In SolidWorks ein neues Makro erstellen - Im Makro ein UserForm hinzufügen - Eine TextBox, eine Combobox, eine CheckBox und zwei OptionButten auf das UserForm platzieren - Diesen Code ins Modul kopieren
Code: Public swApp As SldWorks.ISldWorks Sub Main() Dim i As Integer Set swApp = Application.SldWorks Load UserForm1 For i = 1 To 9 UserForm1.ComboBox1.AddItem "Text " & i Next i UserForm1.Show End Sub
- Diesen Code ins UserForm kopieren
Code: Dim RetStr As StringPrivate Sub UserForm_Activate() ' Lesen der gespeicherten Daten (ggf. Dafult-Werte setzen) Dim target As String target = swApp.GetCurrentMacroPathName target = Left(target, InStrRev(target, "\")) Get_Config target & "\ini_schreiben.ini" End Sub Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer) ' Speichern der aktuellen Eigenschaften Dim target As String target = swApp.GetCurrentMacroPathName target = Left(target, InStrRev(target, "\")) Set_Config target & "\ini_schreiben.ini" End Sub ' INI-Daten lesen und Eigenschaften setzen Public Sub Get_Config(ByVal IniPath As String) RetStr = Space(256) ReadIni "General", "Textbox1", "Vorgabetext", RetStr, Len(RetStr), IniPath TextBox1.Text = Left$(RetStr, InStr(1, RetStr, vbNullChar) - 1) ReadIni "General", "CheckBox1", "0", RetStr, Len(RetStr), IniPath CheckBox1.Value = CBool(Left$(RetStr, InStr(1, RetStr, vbNullChar) - 1)) ReadIni "General", "OptionButton1", "0", RetStr, Len(RetStr), IniPath OptionButton1.Value = CBool(Left$(RetStr, InStr(1, RetStr, vbNullChar) - 1)) ReadIni "General", "OptionButton2", "0", RetStr, Len(RetStr), IniPath OptionButton2.Value = CBool(Left$(RetStr, InStr(1, RetStr, vbNullChar) - 1)) ReadIni "General", "ComboBox1", "", RetStr, Len(RetStr), IniPath ComboBox1.Value = Left$(RetStr, InStr(1, RetStr, vbNullChar) - 1) End Sub ' Schreiben der Eigenschaften in die INI-Datei Public Sub Set_Config(ByVal IniPath As String) ' Schreibt die Einträge in eine INI-Datei ' (Umwandeln in einen String nicht vergessen) WriteIni "General", "Textbox1", TextBox1.Text, IniPath WriteIni "General", "CheckBox1", CStr(CInt(CheckBox1.Value)), IniPath WriteIni "General", "OptionButton1", CStr(CInt(OptionButton1.Value)), IniPath WriteIni "General", "OptionButton2", CStr(CInt(OptionButton2.Value)), IniPath WriteIni "General", "ComboBox1", CStr(ComboBox1.Value), IniPath End Sub ' https://www.vbarchiv.net/tipps/tipp_138-verwalten-von-ini-dateien.html ' zunächst die benötigten API-Deklarationen ' Achtung, die Originale wurden etwas umbenannt Public Declare PtrSafe Function ReadIni Lib "kernel32" _ Alias "GetPrivateProfileStringA" ( _ ByVal lpApplicationName As String, _ ByVal lpKeyName As Any, _ ByVal lpDefault As String, _ ByVal lpReturnedString As String, _ ByVal nSize As Long, _ ByVal lpFileName As String) As Long Public Declare PtrSafe Function WriteIni Lib "kernel32" _ Alias "WritePrivateProfileStringA" ( _ ByVal lpApplicationName As String, _ ByVal lpKeyName As Any, _ ByVal lpString As Any, _ ByVal lpFileName As String) As Long
- Sub Main ausführen Die ini-Datei wird im Ordner des Makros gespeichert. Für Mehrbenutzer entweder den Pfad zu ini-Datei oder den ini-Dateinamen individualisieren. Gruss Andreas ------------------ 21 ist nur die halbe Antwort. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
2-Mars Mitglied B.Sc. Maschinenbau
Beiträge: 14 Registriert: 02.06.2019 Catia V5 6R2014 Autodesk Inventor 2019
|
erstellt am: 05. Feb. 2024 19:37 <-- editieren / zitieren --> Unities abgeben:
Vielen Dank für die vielen Antworten! Das hilft mir um einiges weiter. Den Programm Code von HenryV sieht vielversprechend aus. Den werde ich in einer ruhigen Minute mal testen und mich bei Unklarheiten melden. ------------------ Normal ist auch langweilig. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
|