| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für SOLIDWORKS |
| |
| Bechtle Competence Days | Online |
Autor
|
Thema: Makro für Einheit+Dateieigenschaft setzen (1161 mal gelesen)
|
Solid Worker Mitglied Techniker Maschinenbau
Beiträge: 34 Registriert: 11.09.2003 / Software: Win 11 Pro -Solid Works 2023-SP4 (Solid Works seit 1999) -AutoCAD LT 2024 -CoCreate ME10 8.7G ;-) / Hardware: DELL 3660 Tower Intel Core i7 12700K 32GB RAM nVidia RTX A2000 3DConnexion SpaceMouse Pro
|
erstellt am: 27. Apr. 2022 14:18 <-- editieren / zitieren --> Unities abgeben:
Hallo Zusammen, ich bräuchte mal Hilfe bei den Makros. Mein Plan ist ein Makro zu basteln, mit dem ich das Gewicht einer BG setzen und anschließend im Zeichnungsrahmen einfügen kann. Vorher möchte ich aber die Einheiten der BG anpassen. Mein Wunsch für das Makro ist also: 1. Dokumenteinheit für Masse auf keine Dezimalstellen + Einheit Kilogramm setzen 2. Dateieigenschaft erzeugen mit Eigenschaftsname: "GEWICHT" / Typ: TEXT / Wert: MASSE (beide Schritte in einem Makro) Den Teil 1 bekomme ich auch per Makroaufzeichnung hin. Beim Hinzufügen der Dateieigenschaft hänge ich in der Luft. Sicher kann mir jemand helfen VG Solid Worker
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
R3vo Mitglied staatl. gepr. Techniker, Konstrukteur
Beiträge: 107 Registriert: 03.11.2021 Programme: CAD: SolidWorks 2021 SP5.1 PDM: SpeedyPDM 7.5 ------------------------ CPU: i7 10700 GPU: Nvidia Quadro RTX4000 RAM: 64 Gbyte Datenträger: SSD
|
erstellt am: 27. Apr. 2022 14:26 <-- editieren / zitieren --> Unities abgeben: Nur für Solid Worker
|
Solid Worker Mitglied Techniker Maschinenbau
Beiträge: 34 Registriert: 11.09.2003 / Software: Win 11 Pro -Solid Works 2023-SP4 (Solid Works seit 1999) -AutoCAD LT 2024 -CoCreate ME10 8.7G ;-) / Hardware: DELL 3660 Tower Intel Core i7 12700K 32GB RAM nVidia RTX A2000 3DConnexion SpaceMouse Pro
|
erstellt am: 27. Apr. 2022 15:08 <-- editieren / zitieren --> Unities abgeben:
|
R3vo Mitglied staatl. gepr. Techniker, Konstrukteur
Beiträge: 107 Registriert: 03.11.2021 Programme: CAD: SolidWorks 2021 SP5.1 PDM: SpeedyPDM 7.5 ------------------------ CPU: i7 10700 GPU: Nvidia Quadro RTX4000 RAM: 64 Gbyte Datenträger: SSD
|
erstellt am: 27. Apr. 2022 15:09 <-- editieren / zitieren --> Unities abgeben: Nur für Solid Worker
|
Solid Worker Mitglied Techniker Maschinenbau
Beiträge: 34 Registriert: 11.09.2003 / Software: Win 11 Pro -Solid Works 2023-SP4 (Solid Works seit 1999) -AutoCAD LT 2024 -CoCreate ME10 8.7G ;-) / Hardware: DELL 3660 Tower Intel Core i7 12700K 32GB RAM nVidia RTX A2000 3DConnexion SpaceMouse Pro
|
erstellt am: 27. Apr. 2022 16:03 <-- editieren / zitieren --> Unities abgeben:
|
Solid Worker Mitglied Techniker Maschinenbau
Beiträge: 34 Registriert: 11.09.2003 / Software: Win 11 Pro -Solid Works 2023-SP4 (Solid Works seit 1999) -AutoCAD LT 2024 -CoCreate ME10 8.7G ;-) / Hardware: DELL 3660 Tower Intel Core i7 12700K 32GB RAM nVidia RTX A2000 3DConnexion SpaceMouse Pro
|
erstellt am: 28. Apr. 2022 09:20 <-- editieren / zitieren --> Unities abgeben:
vielleicht kann mir noch jemand einen Tipp geben. möglicherweise geht es hiermit in die richtige Richtung: value = instance.Add3(FieldName, FieldType, FieldValue, OverwriteExisting) aber woher bekomme ich den FieldValue für das Gewicht??
[Diese Nachricht wurde von Solid Worker am 28. Apr. 2022 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
R3vo Mitglied staatl. gepr. Techniker, Konstrukteur
Beiträge: 107 Registriert: 03.11.2021 Programme: CAD: SolidWorks 2021 SP5.1 PDM: SpeedyPDM 7.5 ------------------------ CPU: i7 10700 GPU: Nvidia Quadro RTX4000 RAM: 64 Gbyte Datenträger: SSD
|
erstellt am: 28. Apr. 2022 11:38 <-- editieren / zitieren --> Unities abgeben: Nur für Solid Worker
Code: Set swPropMgr = swModelExt.CustomPropertyManager("") value = swPropMgr.Add3("Material", swCustomInfoText, Chr(34) & "SW-Material@" & swModel.GetTitle & Chr(34), swCustomPropertyReplaceValue)
Das ist zwar für die Eigenschaft Material, lässt sich aber für das/die Gewicht/Masse ähnlich umsetzen. Schau mal ob dir das weiterhilft. [Diese Nachricht wurde von R3vo am 28. Apr. 2022 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Solid Worker Mitglied Techniker Maschinenbau
Beiträge: 34 Registriert: 11.09.2003 / Software: Win 11 Pro -Solid Works 2023-SP4 (Solid Works seit 1999) -AutoCAD LT 2024 -CoCreate ME10 8.7G ;-) / Hardware: DELL 3660 Tower Intel Core i7 12700K 32GB RAM nVidia RTX A2000 3DConnexion SpaceMouse Pro
|
erstellt am: 28. Apr. 2022 14:20 <-- editieren / zitieren --> Unities abgeben:
|
Solid Worker Mitglied Techniker Maschinenbau
Beiträge: 34 Registriert: 11.09.2003 / Software: Win 11 Pro -Solid Works 2023-SP4 (Solid Works seit 1999) -AutoCAD LT 2024 -CoCreate ME10 8.7G ;-) / Hardware: DELL 3660 Tower Intel Core i7 12700K 32GB RAM nVidia RTX A2000 3DConnexion SpaceMouse Pro
|
erstellt am: 28. Apr. 2022 14:55 <-- editieren / zitieren --> Unities abgeben:
Ich bin nun an einem Punkt angelangt, wo ich wohl aufgeben werde. Leider blicke ich beim VBA noch nicht durch. Mir fehlt auch momentan die Zeit, mich erst stundenlang damit zu beschäftigen. Es geht dann wohl schneller, wenn ich in den Dokumenteigenschaften selber eine Zeile mit dem Gewicht einfüge. Trotzdem wäre es natürlich super, falls jemand so ein Makro hat und den Code hier veröffentlicht VG Solid Worker Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ralf Tide Moderator -
Beiträge: 4978 Registriert: 06.08.2001 Sehr seltsame Dinge passiern <Klaus Lage - Toy Story> .-)
|
erstellt am: 28. Apr. 2022 14:57 <-- editieren / zitieren --> Unities abgeben: Nur für Solid Worker
|
Solid Worker Mitglied Techniker Maschinenbau
Beiträge: 34 Registriert: 11.09.2003 / Software: Win 11 Pro -Solid Works 2023-SP4 (Solid Works seit 1999) -AutoCAD LT 2024 -CoCreate ME10 8.7G ;-) / Hardware: DELL 3660 Tower Intel Core i7 12700K 32GB RAM nVidia RTX A2000 3DConnexion SpaceMouse Pro
|
erstellt am: 28. Apr. 2022 15:22 <-- editieren / zitieren --> Unities abgeben:
Hallo Ralf, mein Problem ist, dass die Daten in die Dokumenteigenschaften geschrieben werden sollen. Nicht auslesen. Dass es irgendwie mit Add3 funktionieren soll, habe ich herausgefunden. Mir fehlt aber das drumherum. Zusammenfassend möchte ich einfach in den Dokumenteigenschaften einer BG eine Zeile mit dem Gewicht einfügen. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ralf Tide Moderator -
Beiträge: 4978 Registriert: 06.08.2001 Sehr seltsame Dinge passiern <Klaus Lage - Toy Story> .-)
|
erstellt am: 28. Apr. 2022 15:34 <-- editieren / zitieren --> Unities abgeben: Nur für Solid Worker
Zitat: Original erstellt von Solid Worker: ...geschrieben werden sollen. Nicht auslesen.
Hab ich beim zweiten lesen auch gemerkt Aber: Code:
Option ExplicitDim swApp As SldWorks.SldWorks Dim swModel As ModelDoc2 Dim swModelDocExt As ModelDocExtension Dim swCustProp As CustomPropertyManager Dim val As String Dim valout As String Dim bool As Boolean Dim Wert As Integer Sub main() Set swApp = Application.SldWorks Set swModel = swApp.ActiveDoc Set swModelDocExt = swModel.Extension ' Get the custom property data Set swCustProp = swModelDocExt.CustomPropertyManager("") bool = swCustProp.Get4("Gewicht2", False, val, valout) Debug.Print "Value: " & val Debug.Print "Evaluated value: " & valout Debug.Print "Up-to-date data: " & bool Wert = swCustProp.Add3("Gewicht2", 30, Chr(34) & "SW-Masse@" & swModel.GetTitle & Chr(34), 1) Debug.Print "Wert geschrieben: " & Wert bool = swCustProp.Get4("Gewicht2", False, val, valout) Debug.Print "Value: " & val Debug.Print "Evaluated value: " & valout Debug.Print "Up-to-date data: " & bool End Sub
Damit klappt auch schreiben HTH Ralf ------------------
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Solid Worker Mitglied Techniker Maschinenbau
Beiträge: 34 Registriert: 11.09.2003 / Software: Win 11 Pro -Solid Works 2023-SP4 (Solid Works seit 1999) -AutoCAD LT 2024 -CoCreate ME10 8.7G ;-) / Hardware: DELL 3660 Tower Intel Core i7 12700K 32GB RAM nVidia RTX A2000 3DConnexion SpaceMouse Pro
|
erstellt am: 28. Apr. 2022 16:08 <-- editieren / zitieren --> Unities abgeben:
Oh ja, das sieht gut aus. Grundsätzlich scheint es zu funktionieren. Zumindest wenn ich ein neues Teil anlege. Wenn ich Bestandsdaten nehme funktioniert es noch nicht. Komischerweise wird mir nur der Dateiname als Wert ausgegeben. Beim manuellen Anlegen der Dokumenteigenschaft wird mir dann beim Dateinamen auch die Erweiterung angezeigt. Heißt, es müsste nach dem Dateinamen (swModel.GetTitle) noch die Dateierweiterung mit angefügt werden. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Solid Worker Mitglied Techniker Maschinenbau
Beiträge: 34 Registriert: 11.09.2003 / Software: Win 11 Pro -Solid Works 2023-SP4 (Solid Works seit 1999) -AutoCAD LT 2024 -CoCreate ME10 8.7G ;-) / Hardware: DELL 3660 Tower Intel Core i7 12700K 32GB RAM nVidia RTX A2000 3DConnexion SpaceMouse Pro
|
erstellt am: 28. Apr. 2022 16:42 <-- editieren / zitieren --> Unities abgeben:
Hiermit geht's: Option Explicit Dim swApp As SldWorks.SldWorks Dim swModel As ModelDoc2 Dim swModelDocExt As ModelDocExtension Dim swCustProp As CustomPropertyManager Dim val As String Dim valout As String Dim bool As Boolean Dim Wert As Integer Sub main() Set swApp = Application.SldWorks Set swModel = swApp.ActiveDoc Set swModelDocExt = swModel.Extension ' Get the custom property data Set swCustProp = swModelDocExt.CustomPropertyManager("") bool = swCustProp.Get4("Gewicht2", False, val, valout) Debug.Print "Value: " & val Debug.Print "Evaluated value: " & valout Debug.Print "Up-to-date data: " & bool Wert = swCustProp.Add3("Gewicht1", 30, Chr(34) & "SW-Masse@" & swModel.GetTitle & swModel.GetPathName & Chr(34) & "kg", 1) Debug.Print "Wert geschrieben: " & Wert bool = swCustProp.Get4("Gewicht1", False, val, valout) Debug.Print "Value: " & val Debug.Print "Evaluated value: " & valout Debug.Print "Up-to-date data: " & bool End Sub Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Solid Worker Mitglied Techniker Maschinenbau
Beiträge: 34 Registriert: 11.09.2003 / Software: Win 11 Pro -Solid Works 2023-SP4 (Solid Works seit 1999) -AutoCAD LT 2024 -CoCreate ME10 8.7G ;-) / Hardware: DELL 3660 Tower Intel Core i7 12700K 32GB RAM nVidia RTX A2000 3DConnexion SpaceMouse Pro
|
erstellt am: 28. Apr. 2022 16:46 <-- editieren / zitieren --> Unities abgeben:
|
Ralf Tide Moderator -
Beiträge: 4978 Registriert: 06.08.2001 Sehr seltsame Dinge passiern <Klaus Lage - Toy Story> .-)
|
erstellt am: 28. Apr. 2022 19:35 <-- editieren / zitieren --> Unities abgeben: Nur für Solid Worker
Zitat: Original erstellt von Solid Worker: jetzt bin ich natürlich auf den Geschmack gekommen
Kann ich ja gar nicht glauben Zitat: Original erstellt von Solid Worker: Kann man noch einbauen, dass das Makro nur bei .SLDPRT und .SLDASM ausgeführt werden kann?
Schon vor vielen Jahren von Stefan Berlitz in Code gemeißelt (hier leicht abgewandelt): Code:
' http://solidworks.cad.de/mm_01.htm ' die Konstanten aus swconst.bas, damit nicht mit Zahlen gearbeitet werden muss Const swDocNONE = 0 ' Used to be TYPE_NONE Const swDocPART = 1 ' Used to be TYPE_PART Const swDocASSEMBLY = 2 ' Used to be TYPE_ASSEMBLY Const swDocDRAWING = 3 ' Used to be TYPE_DRAWING Const swDocSDM = 4 ' Solid data manager.Sub Main() ... ' Zeiger auf aktives Dokument holen und überprüfen, ob überhaupt eins aktiv ist Set swModel = SwApp.ActiveDoc If swModel Is Nothing Then MsgBox ("Kein Modell geöffnet") End End If ' Mit Zeichnungen geht's nicht If swModel.GetType() = swDocDRAWING Then MsgBox ("Das Makro funktioniert nicht mit Zeichnungen") End End If ...
HTH - again Ralf ------------------
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Solid Worker Mitglied Techniker Maschinenbau
Beiträge: 34 Registriert: 11.09.2003 / Software: Win 11 Pro -Solid Works 2023-SP4 (Solid Works seit 1999) -AutoCAD LT 2024 -CoCreate ME10 8.7G ;-) / Hardware: DELL 3660 Tower Intel Core i7 12700K 32GB RAM nVidia RTX A2000 3DConnexion SpaceMouse Pro
|
erstellt am: 29. Apr. 2022 08:44 <-- editieren / zitieren --> Unities abgeben:
Hallo Ralf, vielen Dank! Dank deiner Unterstützung habe ich nun mein Makro erfolgreich erstellen können. Nochmal zusammenfassend was das Makro nun macht: - Prüfung des Dateityps, Makro nur für SLDASM oder SLDPRT - Dokumenteigenschaften auf Einheit Kilogramm und eine Dezimalstelle setzen - Dateiinformationen, neue Zeile mit Gewicht des geöffneten Dokuments einfügen (inkl. Kennzeichnung "kg") Code: Option Explicit Dim swApp As SldWorks.SldWorks Dim swModel As ModelDoc2 Dim swModelDocExt As ModelDocExtension Dim swCustProp As CustomPropertyManager Dim val As String Dim valout As String Dim bool As Boolean Dim Wert As Integer Dim myModelView As Object Dim Part As Object Dim boolstatus As Boolean Dim longstatus As Long, longwarnings As Long Sub main() Set swApp = Application.SldWorks Set swModel = swApp.ActiveDoc Set swModelDocExt = swModel.Extension Set Part = swApp.ActiveDoc Set myModelView = Part.ActiveView 'Masseeinheit eine Dezimalstelle, Einheit auf kg setzen myModelView.FrameState = swWindowState_e.swWindowMaximized boolstatus = Part.Extension.SetUserPreferenceInteger(swUserPreferenceIntegerValue_e.swUnitSystem, 0, swUnitSystem_e.swUnitSystem_Custom) boolstatus = Part.Extension.SetUserPreferenceInteger(swUserPreferenceIntegerValue_e.swUnitsMassPropDecimalPlaces, 0, 1) boolstatus = Part.Extension.SetUserPreferenceInteger(swUserPreferenceIntegerValue_e.swUnitsMassPropMass, 0, swUnitsMassPropMass_e.swUnitsMassPropMass_Kilograms) 'Prüfung des SW-Dateityps, Makro nicht für Zeichnungen Const swDocNONE = 0 ' Used to be TYPE_NONE Const swDocPART = 1 ' Used to be TYPE_PART Const swDocASSEMBLY = 2 ' Used to be TYPE_ASSEMBLY Const swDocDRAWING = 3 ' Used to be TYPE_DRAWING Const swDocSDM = 4 ' Solid data manager ' Zeiger auf aktives Dokument holen und überprüfen, ob überhaupt eins aktiv ist Set swModel = swApp.ActiveDoc If swModel Is Nothing Then MsgBox ("Kein Modell geöffnet") End End If ' Mit Zeichnungen geht's nicht If swModel.GetType() = swDocDRAWING Then MsgBox ("Das Makro funktioniert nicht mit Zeichnungen") End End If ' Benutzerdefinierte Dateiinformationen setzen Set swCustProp = swModelDocExt.CustomPropertyManager("") bool = swCustProp.Get4("Gewicht1", False, val, valout) Debug.Print "Value: " & val Debug.Print "Evaluated value: " & valout Debug.Print "Up-to-date data: " & bool Wert = swCustProp.Add3("Gewicht1", 30, Chr(34) & "SW-Masse@" & swModel.GetTitle & swModel.GetPathName & Chr(34) & " kg", 1) Debug.Print "Wert geschrieben: " & Wert bool = swCustProp.Get4("Gewicht1", False, val, valout) Debug.Print "Value: " & val Debug.Print "Evaluated value: " & valout Debug.Print "Up-to-date data: " & bool End Sub
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bk.sc Ehrenmitglied V.I.P. h.c. Konstrukteur Sondermaschinenbau
Beiträge: 2776 Registriert: 18.07.2012 -Solid Works 2019 SP5 -Pro Engineer WF 3
|
erstellt am: 05. Mai. 2022 10:39 <-- editieren / zitieren --> Unities abgeben: Nur für Solid Worker
Hallo, für dich zur Info warum "swModel.GetTitle" bei dir nicht so funktioniert wie bei anderen. Wenn du im Windows Exploder die Option "Erweiterungen bei bekannten Dateitypen ausblenden" aktiv hast wird dein Titel (der Titel vom SWX Fenster mit dem Dokument) ohne Dateierweiterung ausgegeben (weil ja bekannt), wenn du diese Option nicht aktiv hast wird dir die Dateierweiterung mit ausgegeben. Diesen Tipp gebe ich dir, da man öffter mal über dieses verhalten stolpert, vor allem wenn mehrere Benutzer das Macro verwenden sollen. Ich vermeide das verwenden von "GetTitle" ohne vorherige Prüfung ob die Dateierweiterung beinhaltet ist oder nicht. 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 |