| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für SOLIDWORKS |
| |
| SolidCAM auf der GROB Hausmesse 2024 |
Autor
|
Thema: Modelleigenschaften auslesen mit VBA (4732 mal gelesen)
|
Nobody1976 Mitglied
Beiträge: 46 Registriert: 20.05.2014 SWX 2022 SP5.0
|
erstellt am: 20. Mai. 2014 13:38 <-- editieren / zitieren --> Unities abgeben:
Hallo Forum, Ich bräuchte da mal Hilfe! Ich habe ein Makro welches ich aus einer Zeichnung heraus starte. Dieses Makro erstellt ein PDF in einem bestimmten Ordner und versendet dann die PDF als E-Mail. Das funktioniert auch wunderbar. Aber jetzt muss ich an die PDF Datei noch eine Eigenschaft aus dem Modell hinzufügen. Auf der Zeichnung ist die Eigenschaft in einem Schriftfeld mit Link $PRPSHEET:{Rohteilnummer} verlinkt. Kann ich auf diese Eigenschaft auch mit VBA zugreifen? Wenn ja wie und wenn nicht hat da jemand eine Lösung wie ich es anstellen könnte? Danke für eure Bemühungen. LG Udo Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
StefanBerlitz Guter-Geist-Moderator IT Admin (CAx)
Beiträge: 8756 Registriert: 02.03.2000 SunZu sagt: Analysiere die Vorteile, die du aus meinem Ratschlag ziehst. Dann gliedere deine Kräfte entsprechend und mache dir außergewöhnliche Taktiken zunutze.
|
erstellt am: 20. Mai. 2014 14:04 <-- editieren / zitieren --> Unities abgeben: Nur für Nobody1976
Hallo Udo, und herzlich willkommen im SolidWorks Brett auf CAD.de Zitat: Original erstellt von Nobody1976: Auf der Zeichnung ist die Eigenschaft in einem Schriftfeld mit Link $PRPSHEET:{Rohteilnummer} verlinkt. Kann ich auf diese Eigenschaft auch mit VBA zugreifen?
Ja, das geht, ist per API aber nicht ganz so trivial, wie beim interaktiven Einfügen auf der Zeichnung. 1. Du musst von deiner Zeichnung das aktive Blatt ermitteln. 2. Das Sheet hat eine Eigenschaft, von welcher Zeichenansicht die Eigenschaften geholt werden ( Sheet::CustomPropertyView ) 3. Du holst dir das Objekt dieser Zeichenansicht 4. Du öffnest das Modell, das in dieser Zeichenansicht dargestellt wird 5. Von diesem Modell holst du dir den Wert der benutzerdefinierte Dateieigenschaft "Rohteilnummer" Eh voila. Ciao, Stefan ------------------ Inoffizielle deutsche SolidWorks Hilfeseite http://solidworks.cad.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
HenryV Mitglied Konstrukteur, Engineering
Beiträge: 813 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: 20. Mai. 2014 15:05 <-- editieren / zitieren --> Unities abgeben: Nur für Nobody1976
Hallo Udo Ich hab schnell ein Makro gebastelt... Code: Option Explicit Dim swApp As SldWorks.SldWorks Dim swModel As SldWorks.ModelDoc2 Dim swDraw As SldWorks.DrawingDocDim swModelDocExt As SldWorks.ModelDocExtension Dim swSheet As SldWorks.Sheet Dim swView As SldWorks.View Dim swModelRef As SldWorks.ModelDoc2 Dim swCustProp As CustomPropertyManager Dim val As String Dim valout As String Dim bool As Boolean Sub main() Set swApp = Application.SldWorks Set swModel = swApp.ActiveDoc 'Ist ein Dokument offen? If swModel Is Nothing Then MsgBox "Kein Dokument offen", vbCritical End End If 'Ist Dokument eine Zeichnung? If swModel.GetType <> swDocDRAWING Then MsgBox "Nur für Zeichnungen sinnvoll.", vbCritical End End If Set swDraw = swModel 'Aktuelles Blatt holen Set swSheet = swDraw.GetCurrentSheet Set swView = swDraw.GetFirstView 'Ansicht mit Eigenschaften holen If swSheet.CustomPropertyView = "Standard" Then 'Muss der eingestellten Sprache angepasst werden Set swView = swView.GetNextView Else Do While Not swView.Name = swSheet.CustomPropertyView Set swView = swView.GetNextView Loop End If 'Referenziertes Model holen Set swModelRef = swView.ReferencedDocument Set swModelDocExt = swModelRef.Extension 'Eigenschaft auslesen Set swCustProp = swModelDocExt.CustomPropertyManager("") bool = swCustProp.Get4("Rohteilnummer", False, val, valout) 'Eigenschaft ausgeben Debug.Print "Wert: " & val Debug.Print "Evaluierter Wert: " & valout Debug.Print "Ist Wert Aktuell: " & bool End Sub
Zitat: Original erstellt von Nobody1976: Aber jetzt muss ich an die PDF Datei noch eine Eigenschaft aus dem Modell hinzufügen.
Falls du die Eigenschaft in die Eigenschaften des PDFs schreiben willst, gibt hier einen Thread dazu. http://ww3.cad.de/foren/ubb/Forum2/HTML/023258.shtml Gruss Andreas
------------------ 21 ist nur die halbe Antwort. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Nobody1976 Mitglied
Beiträge: 46 Registriert: 20.05.2014 SWX 2022 SP5.0
|
erstellt am: 20. Mai. 2014 15:25 <-- editieren / zitieren --> Unities abgeben:
Hallo HenryV Danke für die schnelle Antwort. Ich habe mal deinen Code versucht aber bin schon gleich am Anfang gescheitert. VBA meldet gleich bei Dim swApp As SldWorks.SldWorks Benutzerdefinierter Typ nicht definiert Kann natürlich auch sein das ich von den Grundeinstellungen was falsch habe. Gruss Udo
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
HenryV Mitglied Konstrukteur, Engineering
Beiträge: 813 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: 20. Mai. 2014 15:44 <-- editieren / zitieren --> Unities abgeben: Nur für Nobody1976
Hallo Udo Da fehlen bei dir wohl ein paar Verweise. Im Menü Tools->References... Haken bei - SolidWorks 2013 Type Library - SolidWorks 2013 Constant Type Library - SolidWorks 2013 Commands Type Library reinmachen und dann sollte es gehen. (Jahreszahl deiner SWX-Version anpassen) Gruss Andreas ------------------ 21 ist nur die halbe Antwort. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Nobody1976 Mitglied
Beiträge: 46 Registriert: 20.05.2014 SWX 2022 SP5.0
|
erstellt am: 20. Mai. 2014 15:48 <-- editieren / zitieren --> Unities abgeben:
|
Nobody1976 Mitglied
Beiträge: 46 Registriert: 20.05.2014 SWX 2022 SP5.0
|
erstellt am: 20. Mai. 2014 16:07 <-- editieren / zitieren --> Unities abgeben:
Hallo HenryV, habe es gefunden. Denke du benutzt eine Englische Version. Bei mir steht es unter Verweise. Funzt auch super. Aber jetzt habe ich noch ein weiteres Problem was ich am Anfang vergessen habe. Wie muss ich es anfangen wenn ich auf konfigurationsspezifische Werte zugreifen will. Es kann bei uns auch sein das die Datei mehrere Konfigurationen hat und dann sind mehrere Seiten die alle eine eigene Rohteilnummer haben. Gruss Udo [Diese Nachricht wurde von Nobody1976 am 20. Mai. 2014 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
HenryV Mitglied Konstrukteur, Engineering
Beiträge: 813 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: 20. Mai. 2014 16:45 <-- editieren / zitieren --> Unities abgeben: Nur für Nobody1976
Hallo Udo Für den Wert aus der aktuellen Konfig kannst du das Makro so abändern Code: ... ''Referenziertes Model holen Set swModelRef = swView.ReferencedDocument swModelRef.ShowConfiguration2 (swView.ReferencedConfiguration)'Set swModelDocExt = swModelRef.Extension ''Eigenschaft auslesen 'Set swCustProp = swModelDocExt.CustomPropertyManager("") Set swConfigMgr = swModelRef.ConfigurationManager Set swConfig = swConfigMgr.ActiveConfiguration Debug.Print "Name of this configuration: " & swConfig.Name Set swCustProp = swConfig.CustomPropertyManager bool = swCustProp.Get4("Rohteilnummer", False, val, valout) 'Eigenschaft ausgeben ....
Gruss Andreas ------------------ 21 ist nur die halbe Antwort. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Nobody1976 Mitglied
Beiträge: 46 Registriert: 20.05.2014 SWX 2022 SP5.0
|
erstellt am: 27. Mai. 2014 07:18 <-- editieren / zitieren --> Unities abgeben:
|