| | |  | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für SOLIDWORKS | | | |  | SOLIDWORKS Schweißkonstruktion - Online-Live, ein Seminar am 13.03.2026
|
|
Autor
|
Thema: Makro Einheiten - Dezimale (2890 mal gelesen)
|
Stephan 85 Mitglied Maschinenbauingenieur
 Beiträge: 5 Registriert: 09.10.2012 SolidWorks Premium 2012 x64-Edition - SP4.0 SolidWorks Enterprise PDM 2012 - SP4.0 HP Elitebook 8760w - 8GB
|
erstellt am: 09. Okt. 2012 18:16 <-- editieren / zitieren --> Unities abgeben:         
Hallo ans Forum, meine erster Beitrag - gleiche eine Frage. Ich habe bereits ein Makro zum Setzen der Einheiten auf mm, gr und cm³ - leider finde ich den entsprechenden Paramter zum Setzen der Dezimalen nicht. Kann mir jemand weiterhelfen? Mein bisheriger Code: Public swApp As SldWorks.SldWorks Public ModelDoc As SldWorks.ModelDoc2 Public swDocExt As SldWorks.ModelDocExtension Public swMass As SldWorks.MassProperty Dim parttype As Variant Dim test As Variant Sub E() Set swApp = CreateObject("SldWorks.Application") Set ModelDoc = swApp.ActiveDoc Set swDocExt = ModelDoc.Extension ' Prüfen, ob es sich um ein Part handelt / check, if the doc is a part parttype = ModelDoc.GetType() If parttype <> 1 Then MsgBox "Tut mir leid, das funktioniert nur bei Teilen" Exit Sub End If ' Testen auf Einheiten-System, sonst setzen auf Benutzerdefiniert test = swDocExt.GetUserPreferenceInteger(swUnitSystem, swDetailingNoOptionSpecified) If test <> swUnitSystem_Custom Then test = swDocExt.SetUserPreferenceInteger(swUnitSystem, swDetailingNoOptionSpecified, swUnitSystem_Custom) End If ' Testen auf Masse-Einheit Länge, sonst setzten auf mm test = swDocExt.GetUserPreferenceInteger(swUnitsMassPropLength, swDetailingNoOptionSpecified) If test <> swMM Then test = swDocExt.SetUserPreferenceInteger(swUnitsMassPropLength, swDetailingNoOptionSpecified, swMM) End If ' Testen auf Masse-Einheit Gewicht, sonst setzen auf g test = swDocExt.GetUserPreferenceInteger(swUnitsMassPropMass, swDetailingNoOptionSpecified) If test <> swUnitsMassPropMass_Grams Then test = swDocExt.SetUserPreferenceInteger(swUnitsMassPropMass, swDetailingNoOptionSpecified, swUnitsMassPropMass_Grams) End If ' Testen auf Masse-Einheit Volumen, sonst setzen auf cm³ test = swDocExt.GetUserPreferenceInteger(swUnitsMassPropVolume, swDetailingNoOptionSpecified) If test <> swUnitsMassPropVolume_Centimeters3 Then test = swDocExt.SetUserPreferenceInteger(swUnitsMassPropVolume, swDetailingNoOptionSpecified, swUnitsMassPropVolume_Centimeters3) End If End Sub Vielen Dank bereits jetzt Stephan Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Stephan 85 Mitglied Maschinenbauingenieur
 Beiträge: 5 Registriert: 09.10.2012 SolidWorks Premium 2012 x64-Edition - SP4.0 SolidWorks Enterprise PDM 2012 - SP4.0 HP Elitebook 8760w - 8GB
|
erstellt am: 10. Okt. 2012 08:11 <-- editieren / zitieren --> Unities abgeben:         
Guten Morgen, ich habe gestern noch weiter gesucht und folgenden Parameter gefunden, weiß aber nicht, ob er stimmt und bekomme es auch nicht zum Laufen: swUnitsMassDecimalPlaces Den Teil, welchen ich in das Makro noch integrieren würde laut wie folgt: ' Testen auf Masse-Dezimale, sonst setzten auf 2 test = swDocExt.GetUserPreferenceInteger(swUnitsMassPropDecimalPlaces, swDetailingNoOptionSpecified) If test <> swUnitsMassDecimalPlaces_2 Then test = swDocExt.SetUserPreferenceInteger(swUnitsMassDecimalPlaces_2, swDetailingNoOptionSpecified) End If Das Makro läuft durch, es ändert aber an den eingestellten Dezimalen nichts. Hat jemand Erfahrung damit, bin absoluter Neuling bei der Programmierung von Makros. Besten Dank an Euch Stephan Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Stephan 85 Mitglied Maschinenbauingenieur
 Beiträge: 5 Registriert: 09.10.2012 SolidWorks Premium 2012 x64-Edition - SP4.0 SolidWorks Enterprise PDM 2012 - SP4.0 HP Elitebook 8760w - 8GB
|
erstellt am: 10. Okt. 2012 08:53 <-- editieren / zitieren --> Unities abgeben:         
Ich bin nochmals einen Schritt weiter: Mit ' Testen auf Masse-Dezimale, sonst setzten auf 2 test = swDocExt.GetUserPreferenceInteger(swUnitsMassPropDecimalPlaces, swDetailingNoOptionSpecified) If test <> swUnitsMassPropDecimalPlaces_2 Then test = swDocExt.SetUserPreferenceInteger(swUnitsMassPropDecimalPlaces, swDetailingNoOptionSpecified, swUnitsMassPropDecimalPlaces_2) End If Setzt er die Dezimalstellen auf keine. Leider weiß ich nicht, wie ich auf .12 oder .123 komme. Kann mir diesen letzten Schritt vll. jemand zeigen? Besten Dank Stephan Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Olaf Wolfram Ehrenmitglied V.I.P. h.c. CAD-Mutti und Konstrukteur CSWP CSWI

 Beiträge: 2431 Registriert: 30.06.2008 I7-3770 CPU 3,40 Ghz 32 Gb RAM 64 bit WIN 10 SWX 2019 SP5 NVIDIA Quadro K2000<P> Lenovo ThinkStation
|
erstellt am: 10. Okt. 2012 09:03 <-- editieren / zitieren --> Unities abgeben:          Nur für Stephan 85
Hallo Stephan, nicht dass du denkst, du mußt hier nur Monologe führen. Ich habe keine Ahnung von Makros, aber vlt hilft dir das weiter, wenn du deine ganze Prozedur mal händisch durchführst, während du den Makrorekorder im Hintergrund laufen lässt. Vielleicht kommst du so zu deinen fehlenden Schnipseln. Ansonsten kommt hier bestimmt noch etwas an Hilfe! ------------------ CSWST/CSWI/CSWP/ 3DVia
DPS-Software GmbH When was the last time you did something for the first time?
  Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
u.clemens Mitglied Konstrukteur
  
 Beiträge: 964 Registriert: 04.07.2000 engineer's law o cheap o fast o good check only two !
|
erstellt am: 10. Okt. 2012 09:40 <-- editieren / zitieren --> Unities abgeben:          Nur für Stephan 85
ich kann an deinem Schnipsel nicht erkennen, welchen Wert du swUnitsMassPropDecimalPlaces_2 zuweist. Wenn du dieser Variablen keinen Wert zuweist, wird sie vermutlich den Wert 0 haben - und dann macht die Methode genau das, was du beschreibst - sie setzt die Dezimalstellen auf keine. An der Stelle. wo du swUnitsMassPropDecimalPlaces_2 stehen hast, muß ein Interger-Wert 0-8 stehen (oder du weist der Variable swUnitsMassPropDecimalPlaces_2 vorher diesen Wert zu) - und dann sollte es klappen. Mit Wert 3 hast du bspw. 3 Nachkommastellen ...
------------------ mfg uc Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Stephan 85 Mitglied Maschinenbauingenieur
 Beiträge: 5 Registriert: 09.10.2012 SolidWorks Premium 2012 x64-Edition - SP4.0 SolidWorks Enterprise PDM 2012 - SP4.0 HP Elitebook 8760w - 8GB
|
erstellt am: 10. Okt. 2012 09:52 <-- editieren / zitieren --> Unities abgeben:         
Hallo uc, hier nochmals das komplete Makro: Public swApp As SldWorks.SldWorks Public ModelDoc As SldWorks.ModelDoc2 Public swDocExt As SldWorks.ModelDocExtension Public swMass As SldWorks.MassProperty Dim parttype As Variant Dim test As Variant Sub E() Set swApp = CreateObject("SldWorks.Application") Set ModelDoc = swApp.ActiveDoc Set swDocExt = ModelDoc.Extension ' Prüfen, ob es sich um ein Part handelt / check, if the doc is a part parttype = ModelDoc.GetType() If parttype <> 1 Then MsgBox "Tut mir leid, das funktioniert nur bei Teilen" Exit Sub End If ' Testen auf Einheiten-System, sonst setzen auf Benutzerdefiniert test = swDocExt.GetUserPreferenceInteger(swUnitSystem, swDetailingNoOptionSpecified) If test <> swUnitSystem_Custom Then test = swDocExt.SetUserPreferenceInteger(swUnitSystem, swDetailingNoOptionSpecified, swUnitSystem_Custom) End If ' Testen auf Masse-Einheit Länge, sonst setzten auf mm test = swDocExt.GetUserPreferenceInteger(swUnitsMassPropLength, swDetailingNoOptionSpecified) If test <> swMM Then test = swDocExt.SetUserPreferenceInteger(swUnitsMassPropLength, swDetailingNoOptionSpecified, swMM) End If ' Testen auf Masse-Dezimale, sonst setzten auf 2 test = swDocExt.GetUserPreferenceInteger(swUnitsMassPropDecimalPlaces, swDetailingNoOptionSpecified) If test <> swUnitsMassPropDecimalPlaces_2 Then test = swDocExt.SetUserPreferenceInteger(swUnitsMassPropDecimalPlaces, swDetailingNoOptionSpecified, 5) End If ' Testen auf Masse-Einheit Gewicht, sonst setzen auf g test = swDocExt.GetUserPreferenceInteger(swUnitsMassPropMass, swDetailingNoOptionSpecified) If test <> swUnitsMassPropMass_Grams Then test = swDocExt.SetUserPreferenceInteger(swUnitsMassPropMass, swDetailingNoOptionSpecified, swUnitsMassPropMass_Grams) End If ' Testen auf Masse-Einheit Volumen, sonst setzen auf cm³ test = swDocExt.GetUserPreferenceInteger(swUnitsMassPropVolume, swDetailingNoOptionSpecified) If test <> swUnitsMassPropVolume_Centimeters3 Then test = swDocExt.SetUserPreferenceInteger(swUnitsMassPropVolume, swDetailingNoOptionSpecified, swUnitsMassPropVolume_Centimeters3) End If End Sub kannst Du mir zeigen, wo der Integer- Wert hin muss?
Danke Stephan Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Stephan 85 Mitglied Maschinenbauingenieur
 Beiträge: 5 Registriert: 09.10.2012 SolidWorks Premium 2012 x64-Edition - SP4.0 SolidWorks Enterprise PDM 2012 - SP4.0 HP Elitebook 8760w - 8GB
|
erstellt am: 10. Okt. 2012 10:31 <-- editieren / zitieren --> Unities abgeben:         
Ich habe es gelöst, hier das komplette Makro zum Setzen der Einheiten in mm, g und cm³ mit 2 Dezimalen. UC hat mir den entscheidenen Hinweis gegeben - Unities sind unterwegs! Public swApp As SldWorks.SldWorks Public ModelDoc As SldWorks.ModelDoc2 Public swDocExt As SldWorks.ModelDocExtension Public swMass As SldWorks.MassProperty Dim parttype As Variant Dim userPref As Integer Dim userPrefOption As Integer Dim value As Integer Dim test As Variant Sub E() Set swApp = CreateObject("SldWorks.Application") Set ModelDoc = swApp.ActiveDoc Set swDocExt = ModelDoc.Extension ' Prüfen, ob es sich um ein Part handelt / check, if the doc is a part parttype = ModelDoc.GetType() If parttype <> 1 Then MsgBox "Tut mir leid, das funktioniert nur bei Teilen" Exit Sub End If ' Testen auf Einheiten-System, sonst setzen auf Benutzerdefiniert test = swDocExt.GetUserPreferenceInteger(swUnitSystem, swDetailingNoOptionSpecified) If test <> swUnitSystem_Custom Then test = swDocExt.SetUserPreferenceInteger(swUnitSystem, swDetailingNoOptionSpecified, swUnitSystem_Custom) End If ' Testen auf Masse-Einheit Länge, sonst setzten auf mm test = swDocExt.GetUserPreferenceInteger(swUnitsMassPropLength, swDetailingNoOptionSpecified) If test <> swMM Then test = swDocExt.SetUserPreferenceInteger(swUnitsMassPropLength, swDetailingNoOptionSpecified, swMM) End If ' Testen auf Masse-Dezimale, sonst setzten auf 2 test = swDocExt.GetUserPreferenceInteger(swUnitsMassPropDecimalPlaces, swDetailingNoOptionSpecified) If test <> swUnitsMassPropDecimalPlaces_2 Then test = swDocExt.SetUserPreferenceInteger(swUnitsMassPropDecimalPlaces, swDetailingNoOptionSpecified, 2) End If ' Testen auf Masse-Einheit Gewicht, sonst setzen auf g test = swDocExt.GetUserPreferenceInteger(swUnitsMassPropMass, swDetailingNoOptionSpecified) If test <> swUnitsMassPropMass_Grams Then test = swDocExt.SetUserPreferenceInteger(swUnitsMassPropMass, swDetailingNoOptionSpecified, swUnitsMassPropMass_Grams) End If ' Testen auf Masse-Einheit Volumen, sonst setzen auf cm³ test = swDocExt.GetUserPreferenceInteger(swUnitsMassPropVolume, swDetailingNoOptionSpecified) If test <> swUnitsMassPropVolume_Centimeters3 Then test = swDocExt.SetUserPreferenceInteger(swUnitsMassPropVolume, swDetailingNoOptionSpecified, swUnitsMassPropVolume_Centimeters3) End If End Sub
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
 |