Hot News:

Unser Angebot:

  Foren auf CAD.de (alle Foren)
  VBasic / vb.net / vbs / wsh
  VBA Solidworks Makro Programmierung

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:  VBA Solidworks Makro Programmierung (313 / mal gelesen)
2-Mars
Mitglied
B.Sc. Maschinenbau


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

Beiträge: 14
Registriert: 02.06.2019

Catia V5 6R2014
Autodesk Inventor 2019

erstellt am: 19. Jan. 2024 22:44    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 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.



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

Beiträge: 3787
Registriert: 29.09.2004

SolidWorks 2024 SP0.1

erstellt am: 22. Jan. 2024 11:50    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 2-Mars 10 Unities + Antwort hilfreich

Hier ein Beitrag, wo die erste Antwort gut erklärt, wieso ein File als Speicherort für die geänderten Default-Einstellungen eine gute Idee ist.

https://www.herber.de/forum/archiv/1176to1180/1177397_Mit_Makro_anderes_Makro_aendern.html

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

2-Mars
Mitglied
B.Sc. Maschinenbau


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

Beiträge: 14
Registriert: 02.06.2019

Catia V5 6R2014
Autodesk Inventor 2019

erstellt am: 23. Jan. 2024 20:47    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

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.



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

Beiträge: 3787
Registriert: 29.09.2004

SolidWorks 2024 SP0.1

erstellt am: 23. Jan. 2024 21:21    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 2-Mars 10 Unities + Antwort hilfreich


20240123_dateiausgabe.zip

 
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



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

Beiträge: 2748
Registriert: 02.05.2006

AutoCAD LandDesktop R2 bis 2004
Civil 3D 2005 - 2014
Plateia, Canalis
Visual Basic

erstellt am: 24. Jan. 2024 13:02    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 2-Mars 10 Unities + Antwort hilfreich

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


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

Beiträge: 803
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 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 2-Mars 10 Unities + Antwort hilfreich

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 String

Private 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


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

Beiträge: 14
Registriert: 02.06.2019

Catia V5 6R2014
Autodesk Inventor 2019

erstellt am: 05. Feb. 2024 19:37    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

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

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)2024 CAD.de | Impressum | Datenschutz