| | | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für SOLIDWORKS | | | | FMB |
Autor
|
Thema: Zuweisung einer „Komponentenreferenz“ per Makro (893 / mal gelesen)
|
Solidwörker Mitglied Konstrukteur
Beiträge: 4 Registriert: 20.09.2012 SWX 2019 SP5 Win10 64bit SolidWorks PDM HP Z4 Intel Xeon W-2225 32GB RAM Nvidia Quadro RTX4000
|
erstellt am: 13. Nov. 2020 15:36 <-- editieren / zitieren --> Unities abgeben:
Zur Strukturierung der Stückliste weisen wir Teilen in den Baugruppen eine „Komponentenreferenz“ zu. Leider kann die „Komponentenreferenz“ nicht bei mehreren ausgewählten Teilen auf einmal eingetragen werden. Zudem ist jedes Mal auszuwählen dass die „Komponentenreferenz“ in allen Konfigurationen geändert werden soll. Zur Vereinfachung habe ich ein Makro erstellt. Es funktioniert auch soweit. Leider konnte ich nicht herausfinden wie die einzutragende „Komponentenreferenz“ in alle Konfigurationen übernommen werden kann. Auch der Makro-Recorder hat leider nicht weiter geholfen. Kann mir dazu jemand einen Tipp geben? Vorab vielen DankDas vereinfachte Makro sieht wie folgt aus: Sub main() Dim swApp As Object Dim Part As Object Dim boolstatus As Boolean Dim swComp As Component2 Dim Kompref As String Dim i As Integer Dim a As Integer Set swApp = Application.SldWorks Set Part = swApp.ActiveDoc 'Menge der ausgewählten Teile zählen While Not Part.SelectionManager.GetSelectedObjectsComponent4(a + 1, -1) Is Nothing a = a + 1 Wend ' Eingabe Komponentenreferenz Kompref = InputBox("Bitte Komponentenreferenz eingeben.", "Komponentenreferenz eingeben") For i = 1 To a Set swComp = Part.SelectionManager.GetSelectedObjectsComponent4(i, -1) swComp.ComponentReference = Kompref Next i boolstatus = Part.ForceRebuild3(True) Exit Sub End Sub
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Malte70 Mitglied Konstrukteur
Beiträge: 61 Registriert: 11.11.2020 PC1 AMD Threadripper 1020X 12-Core G.Skill 64GB DDR4 MSI RX5700XT GDDR6 8GB 1TB SSD M2 Windows 10 Pro Inventor 2018 Inventor 2017 Solidworks 2015 Solidworks 2020 Solidworks 2018 SW PDM 2015 und 2020 Logitrace V.12 Autocad R13 Autocad 2017 Office 2019 Baugruppen meist ab 20.000 Teile<P>PC2 Dell Precision 5820
|
erstellt am: 13. Nov. 2020 23:20 <-- editieren / zitieren --> Unities abgeben: Nur für Solidwörker
Hallo, habe sowas ähnliches vor. Habe deswegen ein Programm umgeschrieben, das mir die Eigenschaften ändert, die bei uns vorhandenen Eigenschaften löscht und neue hinzufügt. das geschieht bei mir über einen Dateipfad und die eingegebenen teile. habe nur noch nicht raus, wie ich das Material und das Gewicht zuweise. Sub main() Set swApp = Application.SldWorks Dim FileName As String Dim Errors As Long Errors = 0 Dim Warnings As Long Warnings = 0 Dim strOrdnerName As String Dim strName As String Dim intz As Integer strOrdnerName = "C:\Zwischenordner\Strukturbauteile\DIN\UNP\" strName = Dir(strOrdnerName & "*.sldlfp") Do While strName <> "" FileName = strOrdnerName & strName If FileName = strOrdnerName Then Exit Do End If Set ModelDoc = swApp.OpenDoc6(FileName, 1, 0, "", Errors, Warnings) swApp.ActivateDoc2 strName, False, Errors Dim val As String Dim valout As String Dim boolstatus As Boolean Set swModelDocExt = ModelDoc.Extension Set swCustProp = swModelDocExt.CustomPropertyManager("") boolstatus = swCustProp.Get4("Oberflächenbehandlung", False, val, valout) boolstatus = ModelDoc.DeleteCustomInfo("Oberflächenbehandlung") boolstatus = swCustProp.Get4("Oberflächenbehandlung", False, val, valout) boolstatus = swCustProp.Get4("Gewicht", False, val, valout) boolstatus = ModelDoc.DeleteCustomInfo("Gewicht") boolstatus = swCustProp.Get4("Gewicht", False, val, valout) boolstatus = swCustProp.Get4("Beschreibung", False, val, valout) boolstatus = ModelDoc.DeleteCustomInfo("Beschreibung") boolstatus = swCustProp.Get4("Beschreibung", False, val, valout) boolstatus = swCustProp.Get4("Material", False, val, valout) boolstatus = ModelDoc.DeleteCustomInfo("Material") boolstatus = swCustProp.Get4("Material", False, val, valout) boolstatus = ModelDoc.AddCustomInfo("Material", "Text", " " & val) boolstatus = swCustProp.Get4("Norm", False, val, valout) boolstatus = ModelDoc.DeleteCustomInfo("Norm") boolstatus = swCustProp.Get4("Norm", False, val, valout) boolstatus = ModelDoc.AddCustomInfo("Norm", "Text", "DIN1026-1 " & val) boolstatus = swCustProp.Get4("Abmessung", False, val, valout) boolstatus = ModelDoc.DeleteCustomInfo("Abmessung") boolstatus = swCustProp.Get4("Abmessung", False, val, valout) boolstatus = swCustProp.Get4("Abmessungen", False, val, valout) boolstatus = ModelDoc.DeleteCustomInfo("Abmessungen") boolstatus = swCustProp.Get4("Abmessungen", False, val, valout) boolstatus = ModelDoc.AddCustomInfo("Abmessung", "Text", "UPN " & val) boolstatus = swCustProp.Get4("Benennung", False, val, valout) boolstatus = ModelDoc.DeleteCustomInfo("Benennung") boolstatus = swCustProp.Get4("Benennung", False, val, valout) boolstatus = ModelDoc.AddCustomInfo("Gewicht", "Text", " " & val) boolstatus = swCustProp.Get4("Description", False, val, valout) boolstatus = ModelDoc.DeleteCustomInfo("Description") boolstatus = ModelDoc.AddCustomInfo("Benennung", "Text", "UPN-Profil " & val) boolstatus = swCustProp.Get4("Description", False, val, valout) longstatus = ModelDoc.SaveAs3(FileName, 0, 2) Debug.Print (strName & " ==> " & val & " ==> " & valout) Dim Titel As String Titel = ModelDoc.GetTitle swApp.CloseDoc Titel strName = Dir Loop End Sub hoffe das hilft dir irgendwie weiter Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Andi Beck Ehrenmitglied V.I.P. h.c. Konstrukteur
Beiträge: 2572 Registriert: 02.10.2006 Firma: SW 2023-4.0 + PDM Prof. Windows 10 Pro 64bit, i9-11900 32 GbRAM, Quadro P2200 Home: SW 2022-5.0 Passungstabelle von Heinz Windows 11 Pro 64bit, i7-12700K, 32 GbRAM, GeForce GTX 1050Ti Samsung C34H892, 3440x1440 Pixel
|
erstellt am: 14. Nov. 2020 08:03 <-- editieren / zitieren --> Unities abgeben: Nur für Solidwörker
Hallo, ich habe für das Gewicht und Material folgende Schleife verwendet, um sie in alle Konfigs einzufügen. Code:
Dim swApp As SldWorks.SldWorks Dim swModel As SldWorks.ModelDoc2 Dim sFileName As String Dim boolstatus As Boolean Dim i As Long Set swApp = Application.SldWorks Set swModel = swApp.ActiveDoc sFileName = Mid(swModel.GetPathName, InStrRev(swModel.GetPathName, "\") + 1) vConfNameArr = swModel.GetConfigurationNames For i = 0 To UBound(vConfNameArr) sConfigName = vConfNameArr(i) boolstatus = swModel.DeleteCustomInfo2(sConfigName, "Gewicht") boolstatus = swModel.AddCustomInfo3(sConfigName, "Gewicht", swCustomInfoText, Chr(34) + "SW-Mass" + "@@" + sConfigName + "@" + sFileName + Chr(34)) boolstatus = swModel.DeleteCustomInfo2(sConfigName, "Material") boolstatus = swModel.AddCustomInfo3(sConfigName, "Material", swCustomInfoText, Chr(34) + "SW-Material" + "@@" + sConfigName + "@" + sFileName + Chr(34)) Next i
Evtl. hilft das ja ein wenig weiter. Grüße, Andi ------------------ Hast du kein Problem? Such dir eins. ( Und löse es ) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Malte70 Mitglied Konstrukteur
Beiträge: 61 Registriert: 11.11.2020 PC1 AMD Threadripper 1020X 12-Core G.Skill 64GB DDR4 MSI RX5700XT GDDR6 8GB 1TB SSD M2 Windows 10 Pro Inventor 2018 Inventor 2017 Solidworks 2015 Solidworks 2020 Solidworks 2018 SW PDM 2015 und 2020 Logitrace V.12 Autocad R13 Autocad 2017 Office 2019 Baugruppen meist ab 20.000 Teile<P>PC2 Dell Precision 5820
|
erstellt am: 14. Nov. 2020 09:25 <-- editieren / zitieren --> Unities abgeben: Nur für Solidwörker
|
Solidwörker Mitglied Konstrukteur
Beiträge: 4 Registriert: 20.09.2012 SWX 2019 SP5 Win10 64bit SolidWorks PDM HP Z4 Intel Xeon W-2225 32GB RAM Nvidia Quadro RTX4000
|
erstellt am: 14. Nov. 2020 11:19 <-- editieren / zitieren --> Unities abgeben:
Danke für die Rückmeldung! Wenn ich das richtig verstehe arbeitet dein Marko auf Teileebene, die Eigenschaften werden im Teil gespeichert. Die "Komponentenreferenz" in meinem Makro wird zwar einem Teil zugewiesen, aber in der Baugruppe für jede Konfiguration einzeln gespeichert. Im Einzelteil wird nichts verändert. Unseren Reseller habe ich auch schon angefragt, leider erfolglos. Freundliche Grüße und ein schönes Wochenende Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Malte70 Mitglied Konstrukteur
Beiträge: 61 Registriert: 11.11.2020 PC1 AMD Threadripper 1020X 12-Core G.Skill 64GB DDR4 MSI RX5700XT GDDR6 8GB 1TB SSD M2 Windows 10 Pro Inventor 2018 Inventor 2017 Solidworks 2015 Solidworks 2020 Solidworks 2018 SW PDM 2015 und 2020 Logitrace V.12 Autocad R13 Autocad 2017 Office 2019 Baugruppen meist ab 20.000 Teile<P>PC2 Dell Precision 5820
|
erstellt am: 14. Nov. 2020 17:26 <-- editieren / zitieren --> Unities abgeben: Nur für Solidwörker
Ja, in diesem falle spreche ich einen Dateipfad an. in diesem Dateipfad spreche ich alle Teile im Format .sldlfp an. (Bibliotheksteile) Mit dem SW Konverter könnte man dies auch mit Teilen oder Baugruppen machen, aber scheinbar macht der auch bei referenzen Probleme. wahrscheinlich gibt es die Möglichkeit alle Propertys mit einem Befehl zu löschen, das wäre wahrscheinlich ein besserer weg. Bei mir sind scheinbar auch noch alte und eigenartige Befehle drin. halt Copy Cut & paste bis zum abwinken Bei mir ist momentan noch das Ergebnis wichtig und nicht der weg. Kommt aber alles noch. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Malte70 Mitglied Konstrukteur
Beiträge: 61 Registriert: 11.11.2020 PC1 AMD Threadripper 1020X 12-Core G.Skill 64GB DDR4 MSI RX5700XT GDDR6 8GB 1TB SSD M2 Windows 10 Pro Inventor 2018 Inventor 2017 Solidworks 2015 Solidworks 2020 Solidworks 2018 SW PDM 2015 und 2020 Logitrace V.12 Autocad R13 Autocad 2017 Office 2019 Baugruppen meist ab 20.000 Teile<P>PC2 Dell Precision 5820
|
erstellt am: 14. Nov. 2020 17:27 <-- editieren / zitieren --> Unities abgeben: Nur für Solidwörker
Ja, in diesem falle spreche ich einen Dateipfad an. in diesem Dateipfad spreche ich alle Teile im Format .sldlfp an. (Bibliotheksteile) Mit dem SW Konverter könnte man dies auch mit Teilen oder Baugruppen machen, aber scheinbar macht der auch bei referenzen Probleme. wahrscheinlich gibt es die Möglichkeit alle Propertys mit einem Befehl zu löschen, das wäre wahrscheinlich ein besserer weg. Bei mir sind scheinbar auch noch alte und eigenartige Befehle drin. halt Copy Cut & paste bis zum abwinken Bei mir ist momentan noch das Ergebnis wichtig und nicht der weg. Kommt aber alles noch. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
|