Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  SolidWorks
  Makro-Problem mit konfigurationsspezifischen benutzerdefinierten Eigenschaften

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
  
Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für SOLIDWORKS
  
On-Demand-Webinare zu SolidCAM (SolidCAM)
Autor Thema:  Makro-Problem mit konfigurationsspezifischen benutzerdefinierten Eigenschaften (2255 mal gelesen)
Rotanimret
Mitglied



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

Beiträge: 31
Registriert: 10.12.2021

erstellt am: 13. Dez. 2021 10:32    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

Ich habe mir ein Makro von Deepak Guptda umgestrickt, damit dateien nur mit Nummer als Name gespeichert werden. Diese Nummer steht in den benutzerdefinierten Eigenschaften und wird im Schriftfeld der Zeichnung und in den Stücklisten benutzt.

Bei Konfigurationen wird die zur Konfiguration gehörende Nummer benutzt.

Häufiger haben wir so ein Modell mit 2 oder 3 Konfigurationen und dazu dann entsprechend viele Fertigungszeichnungen. Das Makro öffnet von der Zeichnung aus die richtige Konfiguration des Models, speichert sie unter der konfigurationsspezifischen Nummer als Step und schließt das Model wieder. Vorher wird die Zeichnung als PDF mit der konfigurationsspezifischen Nummer gespeichert.

Soweit so gut, jetzt das Problem:

Fast immer werden die konfigurationsspezifischen Eigenschaften nur für die zusätzlichen Konfigurationen angegeben, nicht aber für die Standard-Konfiguration. Das Makro öffnet zwar auch da das richtige Model in der richtigen Konfiguration, speichert aber nichts, weil in den konfigurationsspezifischen Eigenschaften nichts drin steht für Standard.

Da es bei Stücklisten und Schriftfeldern aber funktioniert, muss es ja irgendwie gehen.

Ich bin ein noob in Sachen Makros und bastel mir meine Sachen aus Codeschnipseln zusammen, so wird man in diesem Makro auch die entsprechenden Schnipsel wiederfinden.

Wie bekomme ich also die Standard-Eigenschaften ausgelesen, wenn für die Konfiguration keine konfigurationsspezifischen Eigenschaften hinterlegt wurden?

Code:
Dim swApp          As SldWorks.SldWorks
Dim swModel        As SldWorks.ModelDoc2
Dim swDraw          As SldWorks.DrawingDoc
Dim swView          As SldWorks.View
Dim Filepath        As String
Dim FileName        As String
Dim boolstatus      As Boolean
Dim longstatus      As Long
Dim longwarnings    As Long
Dim swCustPrpMgr    As SldWorks.CustomPropertyManager
Dim Value          As String
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
Set swDraw = swApp.ActiveDoc
Set swView = swDraw.GetFirstView
Set swView = swView.GetNextView 'erste Ansicht auf der Zeichnung
Set swModel = swView.ReferencedDocument 'hier hast du dann den ModelDoc2 pointer von dem referenzierten Teil
Set swModelRef = swView.ReferencedDocument
swModelRef.ShowConfiguration2 (swView.ReferencedConfiguration)

' Check to see if a drawing is loaded.
If (swApp.ActiveDoc Is Nothing) Or (swApp.ActiveDoc.GetType <> swDocDRAWING) Then

swApp.SendMsgToUser ("To be used for drawings only, Open a drawing first and then TRY!")

' If no model currently loaded, then exit
Exit Sub

End If

'Set swDraw = swModel

'Filepath = Left(swDraw.GetPathName, InStrRev(swDraw.GetPathName, "\"))
Filepath = "C:\sw-export\"

If Dir(Filepath & "PDF", vbDirectory) = "" Then ' Change Sub folder Name here
MkDir Filepath + "PDF" ' Change Sub folder Name here
End If
Filepath = Filepath + "PDF\" ' Change Sub folder Name here

Set swConfigMgr = swModelRef.ConfigurationManager
Set swConfig = swConfigMgr.ActiveConfiguration

Debug.Print "Name of this configuration: " & swConfig.Name
Set swCustProp = swConfig.CustomPropertyManager

bool = swCustProp.Get4("NR", False, val, valout)

'Set swCustPrpMgr = swModel.Extension.CustomPropertyManager("")
'  swCustPrpMgr.Get4 "NR", False, "", Value 'Change here the var revision "Rev."

FileName = Mid(swDraw.GetPathName, InStrRev(swDraw.GetPathName, "\") + 1)
FileName = "" & val & ".pdf"
'FileName = Left(FileName, Len(FileName) - 7) & "" & Value & ".pdf"

swDraw.SaveAs3 Filepath & FileName & "", 0, 0

'-------------------------------------------------- SAVE STEP

'Filepath = Left(swDraw.GetPathName, InStrRev(swDraw.GetPathName, "\"))
Filepath = "C:\sw-export\"

If Dir(Filepath & "STEP", vbDirectory) = "" Then ' Change Sub folder Name here
MkDir Filepath + "STEP" ' Change Sub folder Name here
End If
Filepath = Filepath + "STEP\" ' Change Sub folder Name here


Set part = swApp.ActiveDoc
Set myModelView = part.ActiveView
myModelView.FrameState = swWindowState_e.swWindowMaximized
swApp.ActivateDoc2 "", False, longstatus
Set part = swApp.ActiveDoc
part.ClearSelection2 True
Set myModelView = part.ActiveView
myModelView.FrameState = swWindowState_e.swWindowMaximized

FileName = Mid(part.GetPathName, InStrRev(part.GetPathName, "\") + 1)
FileName = "" & val & ".step"
'FileName = Left(FileName, Len(FileName) - 7) & "" & Value & ".step"

part.SaveAs3 Filepath & FileName & "", 0, 0

Set swPart = Nothing
Set part = Nothing
swApp.CloseDoc ""
Set part = swApp.ActiveDoc


swDraw.Save

End Sub


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

deckelmaho
Mitglied
Konstrukteur


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

Beiträge: 239
Registriert: 03.03.2020

SolidWorks 2023 SP5
Windows 10 64bit
Office 2019

erstellt am: 13. Dez. 2021 10:58    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 Rotanimret 10 Unities + Antwort hilfreich

Hi Rotanimret (terminatoR)

Ich denke mit dem Makro ist soweit alles in Ordnung.
Wenn ich dich richtig verstanden habe, hast du bei allen Konfigurationen außer bei "Standard" einen Wert für "NR" vergeben.

Er zieht also aus der Konfiguration "Standard" einen leeren String (also "")
Er versuchst also deine Datei zu speichern, hat aber keinen Namen und kann somit nicht speichern ("".PDF)

Am besten fängst du das vorher ab und prüfst ob der Wert leer ist. Wenn du möchtest das er trotzdem etwas speichert, kannst du ihm ja eine Alternative geben
Sowas wie...

Code:

If Trim(val) = "" then val = swConfig.Name

Ich hab es jetzt nicht im VBA getestet.

If val leer ist oder nur aus Leerzeichen besteht then setze den Konfigurationsnamen stattdessen ein.

Dann sollte es funktionieren.

LG Kevin

------------------
HOMEPAGE | SWXTools.de - SWXHelper für SOLIDWORKS
KONTAKT | support@swxtools.de
FACEBOOK | facebook.com/SWXHelper
TWITTER | twitter.com/SWXTools

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

Rotanimret
Mitglied



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

Beiträge: 31
Registriert: 10.12.2021

erstellt am: 13. Dez. 2021 11:56    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

Danke Kevin,

so in der Art habe ich mir das auch gedacht, nur eben nicht zu Ende, weil ich weder VBA noch die SW-spezifischen Variablen und Konstanten nur sehr rudimentär durchblicke.

Vorhandenen code anpassen und ändern ist im Moment noch ganz was anderes, als selbst etwas zu schreiben.

edit:

ich habe es so versucht:

Code:
Debug.Print "Name of this configuration: " & swConfig.Name
Set swCustProp = swConfig.CustomPropertyManager

bool = swCustProp.Get4("NR", False, val, valout)

If Trim(val) = "" Then val = swConfig.Standard


aber das gibt mir einen Fehler "Objekt unterstützt diese Eigenschaft oder Methode nicht"

[Diese Nachricht wurde von Rotanimret am 13. Dez. 2021 editiert.]

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

riesi
Mitglied
CAD-Admin


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

Beiträge: 1073
Registriert: 06.05.2002

SWX Premium 2020-Sp5

erstellt am: 13. Dez. 2021 13: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 Rotanimret 10 Unities + Antwort hilfreich

Das Auslesen der Eigenschaften sollte vom Modell aus erfolgen, wenn es das aktive Dokument geworden ist, nicht vorher.

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

deckelmaho
Mitglied
Konstrukteur


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

Beiträge: 239
Registriert: 03.03.2020

SolidWorks 2023 SP5
Windows 10 64bit
Office 2019

erstellt am: 13. Dez. 2021 13:33    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 Rotanimret 10 Unities + Antwort hilfreich

 

swConfig.Name muss auch weiterhin swConfig.Name bleiben

swConfig.Standard gibt es nicht  

Edit:
Sag mir mal obs funktioniert hat
------------------
HOMEPAGE | SWXTools.de - SWXHelper für SOLIDWORKS
KONTAKT | support@swxtools.de
FACEBOOK | facebook.com/SWXHelper
TWITTER | twitter.com/SWXTools

[Diese Nachricht wurde von deckelmaho am 13. Dez. 2021 editiert.]

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

Rotanimret
Mitglied



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

Beiträge: 31
Registriert: 10.12.2021

erstellt am: 13. Dez. 2021 15:38    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 Tipps!

Es läuft durch, speichert die pdf und step als "Standard.xxx".

Ich hätte natürlich schon gern den Wert für "Nr" aus der Standard-Config.

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

deckelmaho
Mitglied
Konstrukteur


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

Beiträge: 239
Registriert: 03.03.2020

SolidWorks 2023 SP5
Windows 10 64bit
Office 2019

erstellt am: 13. Dez. 2021 17: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 Rotanimret 10 Unities + Antwort hilfreich

Kontrollier mal ob du wirklich eine Eigenschaft vergeben hast.

Ich bin jetzt nicht mehr am PC und kann es selbst schlecht testen.

Ansonsten kannst du, statt dich darauf zu verlassen das er die richtigen Properties abgreift, auch die Methode verwenden die aktuell auskommentiert ist.

Verwende statt

Code:

Set swCustProp = swConfig.CustomPropertyManager


Einfach

Code:

Set swCustPrp = swModel.Extension.CustomPropertyManager(swConfig.Name)


dann spricht du direkt die konfigurationsspezifischen Eigenschaften der jeweiligen Konfiguration an.

Edit:
Und kontrollier auch das der Eigenschaftname richtig geschrieben ist. Denn im Makro fragst du "NR" ab und in deinem Post sprichst du von "Nr". Ein solcher Tippfehler passiert schnell wenn man die Eigenschaften von Hand erzeugt.


LG Kevin

------------------
HOMEPAGE | SWXTools.de - SWXHelper für SOLIDWORKS
KONTAKT | support@swxtools.de
FACEBOOK | facebook.com/SWXHelper
TWITTER | twitter.com/SWXTools

[Diese Nachricht wurde von deckelmaho am 13. Dez. 2021 editiert.]

[Diese Nachricht wurde von deckelmaho am 13. Dez. 2021 editiert.]

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

Rotanimret
Mitglied



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

Beiträge: 31
Registriert: 10.12.2021

erstellt am: 13. Dez. 2021 17:11    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

ich habs mal so versucht:
Code:
bool = swCustProp.Get4("NR", False, val, valout)
'-------------
If Trim(val) = "" Then
Set swCustPrp = swModel.Extension.CustomPropertyManager(swConfig.Name)
bool = swCustProp.Get4("NR", False, val, valout)
End If

Damit ist es aber wieder wie vorher, es wird alles richtig aufgerufen, aber nichts gespeichert.

Nur nochmal zur Erklärung:
Wenn ich die Nummer bei den konfigurationsspezifischen Eigenschaften für die Konfiguration "Standard" eintrage, dann funktioniert es.
Das Problem ist, dass die Nummer in den "normalen" Benutzerdefinierten Eigenschaften steht, nicht aber in den konfigurationsspezifischen.

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

deckelmaho
Mitglied
Konstrukteur


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

Beiträge: 239
Registriert: 03.03.2020

SolidWorks 2023 SP5
Windows 10 64bit
Office 2019

erstellt am: 13. Dez. 2021 17:22    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 Rotanimret 10 Unities + Antwort hilfreich

Schreibst du denn auch in die konfigurationsspezifischen Eigenschaften und nicht in die benutzerdefinierten?

Edit:
Ich dachte die Nummer soll in jeder Konfiguration eine andere sein, dann darf sie nicht in den benutzerdefinierten Eigenschaften stehen, denn die gelten für das gesamte Teil.


------------------
HOMEPAGE | SWXTools.de - SWXHelper für SOLIDWORKS
KONTAKT | support@swxtools.de
FACEBOOK | facebook.com/SWXHelper
TWITTER | twitter.com/SWXTools

[Diese Nachricht wurde von deckelmaho am 13. Dez. 2021 editiert.]

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

deckelmaho
Mitglied
Konstrukteur


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

Beiträge: 239
Registriert: 03.03.2020

SolidWorks 2023 SP5
Windows 10 64bit
Office 2019

erstellt am: 13. Dez. 2021 17:38    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 Rotanimret 10 Unities + Antwort hilfreich

Ich bin jetzt am PC und kann vielleicht noch etwas aktiver helfen

Zitat:

Bei Konfigurationen wird die zur Konfiguration gehörende Nummer benutzt.

Häufiger haben wir so ein Modell mit 2 oder 3 Konfigurationen und dazu dann entsprechend viele Fertigungszeichnungen. Das Makro öffnet von der Zeichnung aus die richtige Konfiguration des Models, speichert sie unter der konfigurationsspezifischen Nummer als Step und schließt das Model wieder. Vorher wird die Zeichnung als PDF mit der konfigurationsspezifischen Nummer gespeichert.


wenn die Nummer konfigurationsspezifisch sein soll, dann kannst du sie nur unter der den konfigurationsspezifischen Eigenschaften speichern.
Bei Konfiguration "Standard" muss ebenfalls einen konfigurationsspezifische Eigenschaft gesetzt werden.


------------------
HOMEPAGE | SWXTools.de - SWXHelper für SOLIDWORKS
KONTAKT | support@swxtools.de
FACEBOOK | facebook.com/SWXHelper
TWITTER | twitter.com/SWXTools

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

Rotanimret
Mitglied



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

Beiträge: 31
Registriert: 10.12.2021

erstellt am: 16. Dez. 2021 10:55    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

Sorry für die Verzögerung, ich musste für eine Inbetriebnahme mal eben nach Bayern...

aaalso, ja, es funktioniert, wenn für Standard konfigurationsspezifische Eigenschaften angegeben werden. Es muss aber auch gehen, wenn dort nichts steht und dann die benutzerdefinierten Eigenschaften genommen werden. bei Stücklisten und Schriftfeldern funktioniert es auch so.

Es müsste so sein, dass geprüft wird, ob für Standard konfigurationsspezifische Eigenschaften vorhanden sind, und wenn nicht, die benutzerdefinierten genommen werden. Und wenn da auch nichts ist, müsste eine Meldung kommen, aber das mit der Meldung kriege ich wohl auch selbst hin.

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

deckelmaho
Mitglied
Konstrukteur


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

Beiträge: 239
Registriert: 03.03.2020

SolidWorks 2023 SP5
Windows 10 64bit
Office 2019

erstellt am: 16. Dez. 2021 11:27    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 Rotanimret 10 Unities + Antwort hilfreich

Schick mir mal dein aktuelles Makro, ich passe es dir kurz an.

Achso, und ja das geht... 

------------------
HOMEPAGE | SWXTools.de - SWXHelper für SOLIDWORKS
KONTAKT | support@swxtools.de
FACEBOOK | facebook.com/SWXHelper
TWITTER | twitter.com/SWXTools

[Diese Nachricht wurde von deckelmaho am 16. Dez. 2021 editiert.]

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

deckelmaho
Mitglied
Konstrukteur


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

Beiträge: 239
Registriert: 03.03.2020

SolidWorks 2023 SP5
Windows 10 64bit
Office 2019

erstellt am: 16. Dez. 2021 18:10    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 Rotanimret 10 Unities + Antwort hilfreich

Hier der überarbeitete Code, den Pfad musst du dir wahrscheinlich nochmal anpassen.

Ich hoffe es funktioniert und ich habe die Funktion nicht falsch verstanden.

LG Kevin


Code:

Dim swApp          As SldWorks.SldWorks
Dim swModel        As SldWorks.ModelDoc2
Dim swDraw          As SldWorks.DrawingDoc
Dim swView          As SldWorks.View
Dim swModelRef      As SldWorks.ModelDoc2
Dim swswConfigMgr  As SldWorks.ConfigurationManager
Dim swConfig        As SldWorks.Configuration
Dim swCustPrpMgr    As SldWorks.CustomPropertyManager

Dim val            As String
Dim valout          As String

Dim Filepath        As String
Dim boolstatus      As Boolean

Sub main()

'Die SOLIDWORKS Instanz holen
Set swApp = Application.SldWorks
'Das aktive Dokument laden (kann erstmal alles sein (Teil, Baugruppe, Zeichnung)
Set swModel = swApp.ActiveDoc
'Das aktive Dokument als Zeichnung übergeben
Set swDraw = swModel


'################################################
'Hier kannst du den Pfad editieren
'################################################
'
'Filepath = "C:\sw-export\"
Filepath = Left(swDraw.GetPathName, InStrRev(swDraw.GetPathName, "\"))
'
'################################################


'Wenn nichts geöffnet ist (Teil, Baugruppe oder Zeichnung), dann Fehler und beenden
If swModel Is Nothing Or (swApp.ActiveDoc.GetType <> swDocDRAWING) Then
swApp.SendMsgToUser ("Es wurde kein aktives Dokument gefunden")
Exit Sub
End If


'Wenn das aktuelle Dokument keine Zeichnung ist, dann Fehler und beenden
If swModel.GetType <> swDocDRAWING Then
swApp.SendMsgToUser ("Das aktuelle Dokument ist keinen Zeichnung")
Exit Sub
End If


'Die erste Ansicht des aktuellen Blattes holen (Ist das Blatt selbst)...
Set swView = swDraw.GetFirstView
'... also eins weiter um die erste Ansicht des Teils zu bekommen
Set swView = swView.GetNextView


'Nun holen wir das Modell aus der Ansicht (es kann eine Baugruppe oder ein Teil sein)
Set swModelRef = swView.ReferencedDocument
'und schalten auf die gleiche Konfiguration wie in der Zeichnung
swModelRef.ShowConfiguration2 (swView.ReferencedConfiguration)


'Wir ziehen uns den ConfigurationsManager des Modells...
Set swConfigMgr = swModelRef.ConfigurationManager
'... und daraus die aktuell aktive Konfiguration
Set swConfig = swConfigMgr.ActiveConfiguration
Debug.Print "Name der aktiven Konfiguration " & swConfig.Name


'Wir holen uns die konfigurationsspezifischen Eigenschaften...
Set swCustPrpMgr = swModelRef.Extension.CustomPropertyManager(swConfig.Name)
'konfigurationsspezifischen Eigenschaft auslesen
boolstatus = swCustPrpMgr.Get4("NR", False, val, valout)


'Wenn in den konfigurationsspezifischen Eigenschaften ein Wert für "NR" gefunden wurde, dann...
If Trim(val) = "" Then
'... die benutzerdefinierten Eigenschaften holen
Set swCustPrpMgr = swModelRef.Extension.CustomPropertyManager("")
'benutzerdefinierte Eigenschaft auslesen
boolstatus = swCustPrpMgr.Get4("NR", False, val, valout)
End If


'Wenn der Wert immernoch leer ist, dann Fehler und raus
If Trim(val) = "" Then
swApp.SendMsgToUser ("Es wurde keine Eigenschaft mit diesem Namen gefunden" & vbCrLf & "Das Makro wird beendet")
Exit Sub
End If


'###############################
'Zeichnung speichern als PDF
'###############################

'Prüfen ob am Zielpfad der Ordner PDF existiert, ansonsten einen Ordner erzeugen
If Dir(Filepath & "PDF", vbDirectory) = "" Then
MkDir Filepath & "PDF"
End If

'Nun die Zeichnung mit der der Nummer als Namen speichern
boolstatus = swDraw.SaveAs3(Filepath & "PDF\" & val & ".pdf", 0, 0)


'###############################
'Modell speichern als STEP
'###############################

'Prüfen ob am Zielpfad der Ordner STEP existiert, ansonsten einen Ordner erzeugen
If Dir(Filepath & "STEP", vbDirectory) = "" Then
MkDir Filepath + "STEP"
End If

'Nun das Teil mit der Nummer als Namen speichern
boolstatus = swModelRef.SaveAs3(Filepath & "STEP\" & val & ".STEP", 0, 0)

End Sub


------------------
HOMEPAGE | SWXTools.de - SWXHelper für SOLIDWORKS
KONTAKT | support@swxtools.de
FACEBOOK | facebook.com/SWXHelper
TWITTER | twitter.com/SWXTools

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

Rotanimret
Mitglied



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

Beiträge: 31
Registriert: 10.12.2021

erstellt am: 17. Dez. 2021 11:31    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

Wow, vielen Dank, es funktioniert und ist auch noch super dokumentiert, klasse!

Kann man Dir ein virtuelles Bier spendieren?

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

deckelmaho
Mitglied
Konstrukteur


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

Beiträge: 239
Registriert: 03.03.2020

SolidWorks 2023 SP5
Windows 10 64bit
Office 2019

erstellt am: 17. Dez. 2021 12:52    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 Rotanimret 10 Unities + Antwort hilfreich

Schon gut, freut mich dass es jetzt macht was du möchtest.


------------------
HOMEPAGE | SWXTools.de - SWXHelper für SOLIDWORKS
KONTAKT | support@swxtools.de
FACEBOOK | facebook.com/SWXHelper
TWITTER | twitter.com/SWXTools

[Diese Nachricht wurde von deckelmaho am 17. Dez. 2021 editiert.]

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

Rotanimret
Mitglied



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

Beiträge: 31
Registriert: 10.12.2021

erstellt am: 21. Dez. 2021 13:43    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

Ich hab da noch eine Frage zu einem Erweiterungswunsch eines Kollegen:

Wenn ich neben "Nr" auch "Benennung" auslesen will, wobei auch "Benennung" konfigurationsspezifisch oder benutzerdefiniert in den Eigenschaften abgelegt sein kann, wie geht das am geschicktesten?

Meist ist es bei uns so, dass die Nr konfigurationsspezifisch angegeben wird, die Benennung aber nicht. Da der Teufel aber ein Eichhörnchen ist, kann es auch mal anders sein.

Die Abfrage müsste also sein:
gibt es "Nr" konfigurationsspezifisch? Falls ja, nimm die, falls nein, nimm aus benutzerdefiniert, so wie es jetzt wunderbar funktioniert.
Das gleiche müsste für "Benennung" passieren und dann im Datei-Namen mit "_" hintereinander geschrieben werden.

Ich hänge bei der doppelten Abfrage. Es ist kein Problem, wenn immer beide Eigenschaften zusammen konfigurationsspezifisch oder benutzerdefiniert sind, aber wie fragt man geschickt beide ab und führt sie danach wieder zusammen?

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

riesi
Mitglied
CAD-Admin


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

Beiträge: 1073
Registriert: 06.05.2002

SWX Premium 2020-Sp5

erstellt am: 21. Dez. 2021 14:00    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 Rotanimret 10 Unities + Antwort hilfreich

Zitat:
Original erstellt von Rotanimret:

Die Abfrage müsste also sein:
gibt es "Nr" konfigurationsspezifisch?

zum Beispiel so:

Code:

Set swCustPrpMgr = swModelRef.Extension.CustomPropertyManager(swConfig.Name)
'konfigurationsspezifischen Eigenschaft auslesen
boolstatus = swCustPrpMgr.Get4("NR", False, val, valout)
If boolstatus = false then
  Set swCustPrpMgr = swModelRef.Extension.CustomPropertyManager("")
  Status = swCustPrpMgr.Get4("NR", False, val, valout)
End If

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

Rotanimret
Mitglied



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

Beiträge: 31
Registriert: 10.12.2021

erstellt am: 21. Dez. 2021 14:34    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

Ja genau, für eine Abfrage funktioniert das Makro auch wunderbar, aber was ist mit 2 Abfragen?
Kann man das elegant in einem Zug abfragen, oder muss man mehrere verschachteln? Oder fragt man nacheinander ab und fügt sie dann zusammen? Oder ganz anders?

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

Rotanimret
Mitglied



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

Beiträge: 31
Registriert: 10.12.2021

erstellt am: 22. Dez. 2021 12:08    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


gespiegeltes-Rohr.JPG

 
ich habe das erstmal selbst hinbekommen, ob es so der eleganteste weg ist, weiß ich nicht, aber es funktioniert:
Code:
Dim swApp          As SldWorks.SldWorks
Dim swModel        As SldWorks.ModelDoc2
Dim swDraw          As SldWorks.DrawingDoc
Dim swView          As SldWorks.View
Dim swModelRef      As SldWorks.ModelDoc2
Dim swswConfigMgr  As SldWorks.ConfigurationManager
Dim swConfig        As SldWorks.Configuration
Dim swCustPrpMgr    As SldWorks.CustomPropertyManager
Dim val1            As String
Dim valout1         As String
Dim val2            As String
Dim valout2         As String

Dim Filepath        As String
Dim boolstatus      As Boolean

Sub main()

'Die SOLIDWORKS Instanz holen
Set swApp = Application.SldWorks
'Das aktive Dokument laden (kann erstmal alles sein (Teil, Baugruppe, Zeichnung)
Set swModel = swApp.ActiveDoc
'Das aktive Dokument als Zeichnung übergeben
Set swDraw = swModel


'################################################
'Hier kannst du den Pfad editieren
'################################################
'
Filepath = "C:\sw-export\"
'Filepath = Left(swDraw.GetPathName, InStrRev(swDraw.GetPathName, "\"))
'
'################################################


'Wenn nichts geöffnet ist (Teil, Baugruppe oder Zeichnung), dann Fehler und beenden
If swModel Is Nothing Or (swApp.ActiveDoc.GetType <> swDocDRAWING) Then
swApp.SendMsgToUser ("Es wurde kein aktives Dokument gefunden")
Exit Sub
End If


'Wenn das aktuelle Dokument keine Zeichnung ist, dann Fehler und beenden
If swModel.GetType <> swDocDRAWING Then
swApp.SendMsgToUser ("Das aktuelle Dokument ist keinen Zeichnung")
Exit Sub
End If


'Die erste Ansicht des aktuellen Blattes holen (Ist das Blatt selbst)...
Set swView = swDraw.GetFirstView
'... also eins weiter um die erste Ansicht des Teils zu bekommen
Set swView = swView.GetNextView


'Nun holen wir das Modell aus der Ansicht (es kann eine Baugruppe oder ein Teil sein)
Set swModelRef = swView.ReferencedDocument
'und schalten auf die gleiche Konfiguration wie in der Zeichnung
swModelRef.ShowConfiguration2 (swView.ReferencedConfiguration)


'Wir ziehen uns den ConfigurationsManager des Modells...
Set swConfigMgr = swModelRef.ConfigurationManager
'... und daraus die aktuell aktive Konfiguration
Set swConfig = swConfigMgr.ActiveConfiguration
Debug.Print "Name der aktiven Konfiguration " & swConfig.Name


'Wir holen uns die konfigurationsspezifischen Eigenschaften...
Set swCustPrpMgr = swModelRef.Extension.CustomPropertyManager(swConfig.Name)
'konfigurationsspezifischen Eigenschaft auslesen
boolstatus = swCustPrpMgr.Get4("NR", False, val1, valout1)


'Wenn in den konfigurationsspezifischen Eigenschaften kein Wert für "NR" gefunden wurde, dann...
If Trim(val1) = "" Then
'... die benutzerdefinierten Eigenschaften holen
Set swCustPrpMgr = swModelRef.Extension.CustomPropertyManager("")
'benutzerdefinierte Eigenschaft auslesen
boolstatus = swCustPrpMgr.Get4("NR", False, val1, valout1)
End If


'Wenn der Wert immernoch leer ist, dann Fehler und raus
If Trim(val1) = "" Then
swApp.SendMsgToUser ("Es wurde keine Eigenschaft -Nr- gefunden" & vbCrLf & "Das Makro wird beendet")
Exit Sub
End If

'konfigurationsspezifischen Eigenschaft auslesen
boolstatus = swCustPrpMgr.Get4("Benennung", False, val2, valout2)


'Wenn in den konfigurationsspezifischen Eigenschaften kein Wert für "Benennung" gefunden wurde, dann...
If Trim(val2) = "" Then
'... die benutzerdefinierten Eigenschaften holen
Set swCustPrpMgr = swModelRef.Extension.CustomPropertyManager("")
'benutzerdefinierte Eigenschaft auslesen
boolstatus = swCustPrpMgr.Get4("Benennung", False, val2, valout2)
End If


'Wenn der Wert immernoch leer ist, dann Fehler und raus
If Trim(val1) = "" Then
swApp.SendMsgToUser ("Es wurde keine Eigenschaft -Benennung- gefunden" & vbCrLf & "Das Makro wird beendet")
Exit Sub
End If

'###############################
'Zeichnung speichern als PDF
'###############################

'Prüfen ob am Zielpfad der Ordner PDF existiert, ansonsten einen Ordner erzeugen
If Dir(Filepath & "PDF", vbDirectory) = "" Then
MkDir Filepath & "PDF"
End If

'Nun die Zeichnung mit der der Nummer_Benennung_Datum als Namen speichern
boolstatus = swDraw.SaveAs3(Filepath & "PDF\" & val1 & "_" & val2 & "_" & (Format(Date, "yyyy-mm-dd")) & ".pdf", 0, 0)


'###############################
'Modell speichern als STEP
'###############################

'Prüfen ob am Zielpfad der Ordner STEP existiert, ansonsten einen Ordner erzeugen
If Dir(Filepath & "STEP", vbDirectory) = "" Then
MkDir Filepath + "STEP"
End If

'Nun das Teil mit der Nummer_Benennung_Datum als Namen speichern
boolstatus = swModelRef.SaveAs3(Filepath & "STEP\" & val1 & "_" & val2 & "_" & (Format(Date, "yyyy-mm-dd")) & ".STEP", 0, 0)

End Sub


ein kleines Problem habe ich noch gefunden:

Selten habe ich Teile, die abgeleitet sind, z.B. gespiegelt, und wo sich die benutzerdefinierten Eigenschaften auf das Mutter-Teil beziehen, dazu das Bild im Anhang.
Da wirft das Makro dann den Fehler aus, dass keine Eigenschaften vorhanden sind.
Müsste man von daher auf den evaluierten Wert gehen?

[Diese Nachricht wurde von Rotanimret am 22. Dez. 2021 editiert.]

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

deckelmaho
Mitglied
Konstrukteur


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

Beiträge: 239
Registriert: 03.03.2020

SolidWorks 2023 SP5
Windows 10 64bit
Office 2019

erstellt am: 22. Dez. 2021 13:25    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 Rotanimret 10 Unities + Antwort hilfreich

Statt val1 und val2 abzufragen kannst du auch valout1 und valout2 abfragen.

das sind die evaluierten Werte.

Und Achtung, du wolltest das selbe anscheinend mit der Eigenschaft "Benennung" machen, dabei fragst du jedoch beide Male nur die benutzerdefinierten Eigenschaften ab.
Da kannst du in der Konfiguration schreiben was du willst, er wird es nicht finden.


EDIT:
Ok, stimmt nicht ganz, wenn er den ersten Wert in der Konfiguration gefunden hat, bleibt der swCustPrpMgr auf der Konfiguration stehen.
Also ganz prozesssicher ist das ganze noch nicht 

------------------
HOMEPAGE | SWXTools.de - SWXHelper für SOLIDWORKS
KONTAKT | support@swxtools.de
FACEBOOK | facebook.com/SWXHelper
TWITTER | twitter.com/SWXTools

[Diese Nachricht wurde von deckelmaho am 22. Dez. 2021 editiert.]

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

Rotanimret
Mitglied



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

Beiträge: 31
Registriert: 10.12.2021

erstellt am: 22. Dez. 2021 15:56    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 Hinweise

Ich habe jetzt nach der Abfrage der Nummer das Ziehen des ConfigurationManagers wiederholt. Scheint genauso zu funktionieren. Ich habe diverse kombinationen von benutzerdefinierten und konfigurationsspezifischen Eigenschaften getestet und noch keinen Fehler in der Ausgabe gefunden.

Ist es denn so besser, und sollte man das eigentlich anders machen?

Code:
Dim swApp          As SldWorks.SldWorks
Dim swModel        As SldWorks.ModelDoc2
Dim swDraw          As SldWorks.DrawingDoc
Dim swView          As SldWorks.View
Dim swModelRef      As SldWorks.ModelDoc2
Dim swswConfigMgr  As SldWorks.ConfigurationManager
Dim swConfig        As SldWorks.Configuration
Dim swCustPrpMgr    As SldWorks.CustomPropertyManager
Dim val1            As String
Dim valout1        As String
Dim val2            As String
Dim valout2        As String

Dim Filepath        As String
Dim boolstatus      As Boolean

Sub main()

'Die SOLIDWORKS Instanz holen
Set swApp = Application.SldWorks
'Das aktive Dokument laden (kann erstmal alles sein (Teil, Baugruppe, Zeichnung)
Set swModel = swApp.ActiveDoc
'Das aktive Dokument als Zeichnung übergeben
Set swDraw = swModel


'################################################
'Hier kannst du den Pfad editieren
'################################################
'
Filepath = "C:\sw-export\"
'Filepath = Left(swDraw.GetPathName, InStrRev(swDraw.GetPathName, "\"))
'
'################################################


'Wenn nichts geöffnet ist (Teil, Baugruppe oder Zeichnung), dann Fehler und beenden
If swModel Is Nothing Or (swApp.ActiveDoc.GetType <> swDocDRAWING) Then
swApp.SendMsgToUser ("Es wurde kein aktives Dokument gefunden")
Exit Sub
End If


'Wenn das aktuelle Dokument keine Zeichnung ist, dann Fehler und beenden
If swModel.GetType <> swDocDRAWING Then
swApp.SendMsgToUser ("Das aktuelle Dokument ist keinen Zeichnung")
Exit Sub
End If


'Die erste Ansicht des aktuellen Blattes holen (Ist das Blatt selbst)...
Set swView = swDraw.GetFirstView
'... also eins weiter um die erste Ansicht des Teils zu bekommen
Set swView = swView.GetNextView


'Nun holen wir das Modell aus der Ansicht (es kann eine Baugruppe oder ein Teil sein)
Set swModelRef = swView.ReferencedDocument
'und schalten auf die gleiche Konfiguration wie in der Zeichnung
swModelRef.ShowConfiguration2 (swView.ReferencedConfiguration)


'Wir ziehen uns den ConfigurationsManager des Modells...
Set swConfigMgr = swModelRef.ConfigurationManager
'... und daraus die aktuell aktive Konfiguration
Set swConfig = swConfigMgr.ActiveConfiguration
Debug.Print "Name der aktiven Konfiguration " & swConfig.Name


'Wir holen uns die konfigurationsspezifischen Eigenschaften...
Set swCustPrpMgr = swModelRef.Extension.CustomPropertyManager(swConfig.Name)
'konfigurationsspezifischen Eigenschaft auslesen
boolstatus = swCustPrpMgr.Get4("NR", False, val1, valout1)


'Wenn in den konfigurationsspezifischen Eigenschaften kein Wert für "NR" gefunden wurde, dann...
If Trim(val1) = "" Then
'... die benutzerdefinierten Eigenschaften holen
Set swCustPrpMgr = swModelRef.Extension.CustomPropertyManager("")
'benutzerdefinierte Eigenschaft auslesen
boolstatus = swCustPrpMgr.Get4("NR", False, val1, valout1)
End If


'Wenn der Wert immernoch leer ist, dann Fehler und raus
If Trim(val1) = "" Then
swApp.SendMsgToUser ("Es wurde keine Eigenschaft -Nr- gefunden" & vbCrLf & "Das Makro wird beendet")
Exit Sub
End If

'Das ganze nochmal für die Benennung
'Wir ziehen uns den ConfigurationsManager des Modells für die Benennung...
Set swConfigMgr = swModelRef.ConfigurationManager
'... und daraus die aktuell aktive Konfiguration
Set swConfig = swConfigMgr.ActiveConfiguration
Debug.Print "Name der aktiven Konfiguration " & swConfig.Name


'Wir holen uns die konfigurationsspezifischen Eigenschaften...
Set swCustPrpMgr = swModelRef.Extension.CustomPropertyManager(swConfig.Name)
'konfigurationsspezifischen Eigenschaft auslesen
boolstatus = swCustPrpMgr.Get4("Benennung", False, val2, valout2)


'Wenn in den konfigurationsspezifischen Eigenschaften kein Wert für "Benennung" gefunden wurde, dann...
If Trim(val2) = "" Then
'... die benutzerdefinierten Eigenschaften holen
Set swCustPrpMgr = swModelRef.Extension.CustomPropertyManager("")
'benutzerdefinierte Eigenschaft auslesen
boolstatus = swCustPrpMgr.Get4("Benennung", False, val2, valout2)
End If


'Wenn der Wert immernoch leer ist, dann Fehler und raus
If Trim(val1) = "" Then
swApp.SendMsgToUser ("Es wurde keine Eigenschaft -Benennung- gefunden" & vbCrLf & "Das Makro wird beendet")
Exit Sub
End If

'###############################
'Zeichnung speichern als PDF
'###############################

'Prüfen ob am Zielpfad der Ordner PDF existiert, ansonsten einen Ordner erzeugen
If Dir(Filepath & "PDF", vbDirectory) = "" Then
MkDir Filepath & "PDF"
End If

'Nun die Zeichnung mit der der Nummer als Namen speichern
boolstatus = swDraw.SaveAs3(Filepath & "PDF\" & valout1 & "_" & valout2 & "_" & (Format(Date, "yyyy-mm-dd")) & ".pdf", 0, 0)


'###############################
'Modell speichern als STEP
'###############################

'Prüfen ob am Zielpfad der Ordner STEP existiert, ansonsten einen Ordner erzeugen
If Dir(Filepath & "STEP", vbDirectory) = "" Then
MkDir Filepath + "STEP"
End If

'Nun das Teil mit der Nummer als Namen speichern
boolstatus = swModelRef.SaveAs3(Filepath & "STEP\" & valout1 & "_" & valout2 & "_" & (Format(Date, "yyyy-mm-dd")) & ".STEP", 0, 0)

End Sub


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

deckelmaho
Mitglied
Konstrukteur


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

Beiträge: 239
Registriert: 03.03.2020

SolidWorks 2023 SP5
Windows 10 64bit
Office 2019

erstellt am: 23. Dez. 2021 07:52    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 Rotanimret 10 Unities + Antwort hilfreich

Sieht doch gut aus, so ist es auf jeden Fall "richtiger" und beugt ungewolltes Verhalten vor.

Das Einzige was ich vielleicht noch ändern würde, wären die If-Abfragen

val1 -> valout1

Code:
If Trim(val1) = "" Then
        '... die benutzerdefinierten Eigenschaften holen
        Set swCustPrpMgr = swModelRef.Extension.CustomPropertyManager("")
        'benutzerdefinierte Eigenschaft auslesen
        boolstatus = swCustPrpMgr.Get4("NR", False, val1, valout1)
End If

Dort werden noch die Werte aus der "Wert / Textausdruck" Spalte abgefragt.
Es wird in deinem Fall keinen Unterschied machen, denn wenn es keinen evaluierten Wert gibt, dann gibt es auch keinen "Wert / Textausdruck" und anders herum.

LG Kevin

------------------
HOMEPAGE | SWXTools.de - SWXHelper für SOLIDWORKS
KONTAKT | support@swxtools.de
FACEBOOK | facebook.com/SWXHelper
TWITTER | twitter.com/SWXTools

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

Rotanimret
Mitglied



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

Beiträge: 31
Registriert: 10.12.2021

erstellt am: 04. Jan. 2022 09:14    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, und frohes neues Jahr 

Einen Fehler hab ich noch gefunden: Die letzte If-Abfrage fragt val1 ab, müsste aber wohl val2 abfragen.

Und ja, das mit val1 -> valout1 verstehe ich, macht hier aber wirklich keinen Unterschied.

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

Rotanimret
Mitglied



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

Beiträge: 31
Registriert: 10.12.2021

erstellt am: 12. Jan. 2022 11:29    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

Ich habe tatsächlich Bauteile, bei denen das Makro nicht funktioniert. Benennung und Nr sind vorhanden, die pdf- und step-ordner werden angelegt, aber es wird nichts gespeichert und es gibt keine Fehlermeldung.

Kann ich das Makro schritt für schritt ausführen, oder wie kann ich den Fehler sonst eingrenzen?

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

deckelmaho
Mitglied
Konstrukteur


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

Beiträge: 239
Registriert: 03.03.2020

SolidWorks 2023 SP5
Windows 10 64bit
Office 2019

erstellt am: 12. Jan. 2022 11:39    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 Rotanimret 10 Unities + Antwort hilfreich

Geh das Makro bei den besagten Teilen mal im Einzelschritt (F8) durch, dann siehst du ja ob er in die jeweiligen If-Bedingungen reinspringt oder nicht.

Wenn er sich die Werte holt kannst du auch mal in die Variablen schauen, ob er einen Wert bekommen hat oder nicht.

LG Kevin

EDIT:

Und da du den Dateinamen aus den Variablen bildest, sollten dort auch nur Zeichen verwendet werden die auch in Dateinamen zulässig sind.
Also kein Späße wie:  \ / : * ? " < > |


------------------
HOMEPAGE | SWXTools.de - SWXHelper für SOLIDWORKS
KONTAKT | support@swxtools.de
FACEBOOK | facebook.com/SWXHelper
TWITTER | twitter.com/SWXTools

[Diese Nachricht wurde von deckelmaho am 12. Jan. 2022 editiert.]

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

Rotanimret
Mitglied



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

Beiträge: 31
Registriert: 10.12.2021

erstellt am: 12. Jan. 2022 16:33    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

Zitat:
Original erstellt von deckelmaho:

[b]EDIT:

Und da du den Dateinamen aus den Variablen bildest, sollten dort auch nur Zeichen verwendet werden die auch in Dateinamen zulässig sind.
Also kein Späße wie:  \ / : * ? " < > |

[/B]


Da liegt der Hase im Pfeffer, es war ein "/" im Namen, danke für den Hinweis!

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

deckelmaho
Mitglied
Konstrukteur


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

Beiträge: 239
Registriert: 03.03.2020

SolidWorks 2023 SP5
Windows 10 64bit
Office 2019

erstellt am: 12. Jan. 2022 16: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 Nur für Rotanimret 10 Unities + Antwort hilfreich

Du kannst dein Makro ja erweitern und prüfst auf unerlaubte Zeichen.

Wenn welche enthalten sind, dann

MsgBox an den Nutzer und die Prozedur beenden.

Hier nen Ansatz wie du das machen könntest inkl. Quelle

Code:

Sub q()
    Dim sTesttext As String
    Dim sUngültigeZeichen As String
    Dim i As Long
 
    sUngültigeZeichen = "<>?[]:|*" & Chr(34) 'für Dateinamen und kleiner 219 Zeichen
    sTesttext = "qwewerw|>:"
 
    For i = 1 To Len(sUngültigeZeichen)
        If InStr(sTesttext, Mid(sUngültigeZeichen, i, 1)) Then
            MsgBox ("Ungültiges Zeichen enthalten."), vbInformation, "Hinweis"
            Exit For
        End If
    Next i
End Sub


http://www.office-loesung.de/ftopic555633_0_0_asc.php

------------------
HOMEPAGE | SWXTools.de - SWXHelper für SOLIDWORKS
KONTAKT | support@swxtools.de
FACEBOOK | facebook.com/SWXHelper
TWITTER | twitter.com/SWXTools

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

Rotanimret
Mitglied



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

Beiträge: 31
Registriert: 10.12.2021

erstellt am: 17. Jan. 2022 12:09    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

Das mache ich, sobald Zeit da ist (das übliche Problem).

Muss das mit dem TestText da rein, oder ist das nur, um einmalig zu sehen, ob es funktioniert?

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

bk.sc
Ehrenmitglied V.I.P. h.c.
Konstrukteur Sondermaschinenbau



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

Beiträge: 2776
Registriert: 18.07.2012

-Solid Works 2019 SP5
-Pro Engineer WF 3

erstellt am: 18. Jan. 2022 15:24    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 Rotanimret 10 Unities + Antwort hilfreich

Zitat:
Original erstellt von Rotanimret:
Das mache ich, sobald Zeit da ist (das übliche Problem).

Muss das mit dem TestText da rein, oder ist das nur, um einmalig zu sehen, ob es funktioniert?


Hallo Rotanimret,

in deinem Fall musst du "sTestText" natürlich durch val1 bzw. val2 ersetzten, weil aus diesen Werten wird ja dein Dateinamen gebildet. In dem Code-Schnipsel dient die "sTestText" Variable nur zum testen der Prüfung.

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

deckelmaho
Mitglied
Konstrukteur


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

Beiträge: 239
Registriert: 03.03.2020

SolidWorks 2023 SP5
Windows 10 64bit
Office 2019

erstellt am: 18. Jan. 2022 15:26    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 Rotanimret 10 Unities + Antwort hilfreich

Rotanimret
Mitglied



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

Beiträge: 31
Registriert: 10.12.2021

erstellt am: 26. Sep. 2022 13:17    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

Ich bin ja noch das komplette Makro schuldig. Ich hab die Abfrage nach ungültigen Zeichen noch eingebaut und Step auf 214 wegen Farben festgelegt.

Nochmals vielen Dank für Eure Hilfe, das Makro wird auch wirklich benutzt!

Code:
Dim swApp          As SldWorks.SldWorks
Dim swModel        As SldWorks.ModelDoc2
Dim swDraw          As SldWorks.DrawingDoc
Dim swView          As SldWorks.View
Dim swModelRef      As SldWorks.ModelDoc2
Dim swswConfigMgr  As SldWorks.ConfigurationManager
Dim swConfig        As SldWorks.Configuration
Dim swCustPrpMgr    As SldWorks.CustomPropertyManager
Dim val1            As String
Dim valout1        As String
Dim val2            As String
Dim valout2        As String
Dim WrongChar      As String
Dim i              As Long
Dim Filepath        As String
Dim boolstatus      As Boolean

Sub main()

'Die SOLIDWORKS Instanz holen
Set swApp = Application.SldWorks
'Step auf v2.14 setzen, damit farben ausgegeben werden
Step = swApp.SetUserPreferenceIntegerValue(swStepAP, 214)
'Das aktive Dokument laden (kann erstmal alles sein (Teil, Baugruppe, Zeichnung)
Set swModel = swApp.ActiveDoc
'Das aktive Dokument als Zeichnung übergeben
Set swDraw = swModel


'################################################
'Hier kannst du den Pfad editieren
'################################################
'
Filepath = "C:\sw-export\"
'Filepath = Left(swDraw.GetPathName, InStrRev(swDraw.GetPathName, "\"))
'
'################################################

'Unerlaubte Zeichen
WrongChar = "<>?:|*\/" & Chr(34) 'für Dateinamen und kleiner 219 Zeichen

'Wenn nichts geöffnet ist (Teil, Baugruppe oder Zeichnung), dann Fehler und beenden
If swModel Is Nothing Or (swApp.ActiveDoc.GetType <> swDocDRAWING) Then
swApp.SendMsgToUser ("Es wurde kein aktives Dokument gefunden")
Exit Sub
End If


'Wenn das aktuelle Dokument keine Zeichnung ist, dann Fehler und beenden
If swModel.GetType <> swDocDRAWING Then
swApp.SendMsgToUser ("Das aktuelle Dokument ist keinen Zeichnung")
Exit Sub
End If


'Die erste Ansicht des aktuellen Blattes holen (Ist das Blatt selbst)...
Set swView = swDraw.GetFirstView
'... also eins weiter um die erste Ansicht des Teils zu bekommen
Set swView = swView.GetNextView


'Nun holen wir das Modell aus der Ansicht (es kann eine Baugruppe oder ein Teil sein)
Set swModelRef = swView.ReferencedDocument
'und schalten auf die gleiche Konfiguration wie in der Zeichnung
swModelRef.ShowConfiguration2 (swView.ReferencedConfiguration)


'Wir ziehen uns den ConfigurationsManager des Modells...
Set swConfigMgr = swModelRef.ConfigurationManager
'... und daraus die aktuell aktive Konfiguration
Set swConfig = swConfigMgr.ActiveConfiguration
Debug.Print "Name der aktiven Konfiguration " & swConfig.Name


'Wir holen uns die konfigurationsspezifischen Eigenschaften...
Set swCustPrpMgr = swModelRef.Extension.CustomPropertyManager(swConfig.Name)
'konfigurationsspezifischen Eigenschaft auslesen
boolstatus = swCustPrpMgr.Get4("NR", False, val1, valout1)


'Wenn in den konfigurationsspezifischen Eigenschaften kein Wert für "NR" gefunden wurde, dann...
If Trim(val1) = "" Then
'... die benutzerdefinierten Eigenschaften holen
Set swCustPrpMgr = swModelRef.Extension.CustomPropertyManager("")
'benutzerdefinierte Eigenschaft auslesen
boolstatus = swCustPrpMgr.Get4("NR", False, val1, valout1)
End If


'Wenn der Wert immernoch leer ist, dann Fehler und raus
If Trim(val1) = "" Then
swApp.SendMsgToUser ("Es wurde keine Eigenschaft -Nr- gefunden" & vbCrLf & "Das Makro wird beendet")
Exit Sub
End If

'Das ganze nochmal für die Benennung
'Wir ziehen uns den ConfigurationsManager des Modells für die Benennung...
Set swConfigMgr = swModelRef.ConfigurationManager
'... und daraus die aktuell aktive Konfiguration
Set swConfig = swConfigMgr.ActiveConfiguration
Debug.Print "Name der aktiven Konfiguration " & swConfig.Name


'Wir holen uns die konfigurationsspezifischen Eigenschaften...
Set swCustPrpMgr = swModelRef.Extension.CustomPropertyManager(swConfig.Name)
'konfigurationsspezifischen Eigenschaft auslesen
boolstatus = swCustPrpMgr.Get4("Benennung", False, val2, valout2)

'Wenn in den konfigurationsspezifischen Eigenschaften kein Wert für "Benennung" gefunden wurde, dann...
If Trim(val2) = "" Then
'... die benutzerdefinierten Eigenschaften holen
Set swCustPrpMgr = swModelRef.Extension.CustomPropertyManager("")
'benutzerdefinierte Eigenschaft auslesen
boolstatus = swCustPrpMgr.Get4("Benennung", False, val2, valout2)
End If


'Wenn der Wert immernoch leer ist, dann Fehler und raus
If Trim(val2) = "" Then
swApp.SendMsgToUser ("Es wurde keine Eigenschaft -Benennung- gefunden" & vbCrLf & "Das Makro wird beendet")
Exit Sub
End If


'Prüfen auf ungültige Zeichen
    For i = 1 To Len(WrongChar)
        If InStr(valout2, Mid(WrongChar, i, 1)) Then
            MsgBox ("Ungültiges Zeichen in -Benennung- enthalten."), vbInformation, "Hinweis"
            Exit For
            Exit Sub
        End If
        If InStr(valout1, Mid(WrongChar, i, 1)) Then
            MsgBox ("Ungültiges Zeichen in -NR- enthalten."), vbInformation, "Hinweis"
            Exit For
            Exit Sub
        End If
    Next i

'###############################
'Zeichnung speichern als PDF
'###############################


'Prüfen ob am Zielpfad der Ordner PDF existiert, ansonsten einen Ordner erzeugen
If Dir(Filepath & "PDF", vbDirectory) = "" Then
MkDir Filepath & "PDF"
End If

'Nun die Zeichnung mit der der Nummer als Namen speichern
boolstatus = swDraw.SaveAs3(Filepath & "PDF\" & valout1 & "_" & valout2 & "_" & (Format(Date, "yyyy-mm-dd")) & ".pdf", 0, 0)


'###############################
'Modell speichern als STEP
'###############################

'Prüfen ob am Zielpfad der Ordner STEP existiert, ansonsten einen Ordner erzeugen
If Dir(Filepath & "STEP", vbDirectory) = "" Then
MkDir Filepath + "STEP"
End If

'Nun das Teil mit der Nummer als Namen speichern
boolstatus = swModelRef.SaveAs3(Filepath & "STEP\" & valout1 & "_" & valout2 & "_" & (Format(Date, "yyyy-mm-dd")) & ".STEP", 0, 0)

End Sub


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

deckelmaho
Mitglied
Konstrukteur


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

Beiträge: 239
Registriert: 03.03.2020

SolidWorks 2023 SP5
Windows 10 64bit
Office 2019

erstellt am: 29. Sep. 2022 09:23    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 Rotanimret 10 Unities + Antwort hilfreich

Hi Rotanimret,

danke dass du die nun fertige Lösung mit uns teilst.
Wenn ihr euch dadurch Minuten oder gar Stunden an Zeit sparen könnt umso besser, dann bleibt auch mehr Zeit
für den wirklich produktiven Part in unserem Job.

Beste Grüße
Kevin

------------------
HOMEPAGE | SWXTools.de - SWXHelper für SOLIDWORKS
KONTAKT | support@swxtools.de
FACEBOOK | facebook.com/SWXHelper
TWITTER | twitter.com/SWXTools

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

Rotanimret
Mitglied



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

Beiträge: 31
Registriert: 10.12.2021

erstellt am: 10. Mrz. 2023 14:10    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

Ich muss nochmal was fragen zum Makro:

Ein Kollege setzt manchmal bei der Zeichnungsnummer ein Leerzeichen an den Anfang, das Vom Makro im Dateinamen auch so mit ausgegeben wird.

Kann man Leerzeichen am Anfang (und am liebsten auch am Ende) über das Makro entfernen?


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: 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: 10. Mrz. 2023 15:16    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 Rotanimret 10 Unities + Antwort hilfreich

Dafür gibt es die LTrim-, RTrim- und Trim-Funktionen

------------------
21 ist nur die halbe Antwort.

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

Rotanimret
Mitglied



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

Beiträge: 31
Registriert: 10.12.2021

erstellt am: 10. Mrz. 2023 15:25    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, das sollte ich hin bekommen!


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

Rotanimret
Mitglied



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

Beiträge: 31
Registriert: 10.12.2021

erstellt am: 14. Mrz. 2023 13: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

Hier nochmal die aktuelle Version.
Zusätzlich zum "Trim" hab ich noch 2 kleine Fehler entfernt, die ein sauberes Aussteigen verhindert haben, wenn das Makro nicht aus einer Zeichnung gestartet wurde.
Code:

Dim swApp          As SldWorks.SldWorks
Dim swModel        As SldWorks.ModelDoc2
Dim swDraw          As SldWorks.DrawingDoc
Dim swView          As SldWorks.View
Dim swModelRef      As SldWorks.ModelDoc2
Dim swswConfigMgr  As SldWorks.ConfigurationManager
Dim swConfig        As SldWorks.Configuration
Dim swCustPrpMgr    As SldWorks.CustomPropertyManager
Dim val1            As String
Dim valout1        As String
Dim val2            As String
Dim valout2        As String
Dim WrongChar      As String
Dim i              As Long
Dim Filepath        As String
Dim boolstatus      As Boolean

Sub main()

'Die SOLIDWORKS Instanz holen
Set swApp = Application.SldWorks
'Step auf v2.14 setzen, damit farben ausgegeben werden
Step = swApp.SetUserPreferenceIntegerValue(swStepAP, 214)
'Das aktive Dokument laden (kann erstmal alles sein (Teil, Baugruppe, Zeichnung)
Set swModel = swApp.ActiveDoc


'################################################
'Hier kannst du den Pfad editieren
'################################################
'
Filepath = "C:\sw-export\"
'Filepath = Left(swDraw.GetPathName, InStrRev(swDraw.GetPathName, "\"))
'
'################################################

'Unerlaubte Zeichen
WrongChar = "<>?:|*\/" & Chr(34) 'für Dateinamen und kleiner 219 Zeichen

'Wenn nichts geöffnet ist (Teil, Baugruppe oder Zeichnung), dann Fehler und beenden
If swModel Is Nothing Then
swApp.SendMsgToUser ("Es wurde kein aktives Dokument gefunden")
Exit Sub
End If


'Wenn das aktuelle Dokument keine Zeichnung ist, dann Fehler und beenden
If swModel.GetType <> swDocDRAWING Then
swApp.SendMsgToUser ("Das aktuelle Dokument ist keinen Zeichnung")
Exit Sub
End If

'Das aktive Dokument als Zeichnung übergeben
Set swDraw = swModel

'Die erste Ansicht des aktuellen Blattes holen (Ist das Blatt selbst)...
Set swView = swDraw.GetFirstView
'... also eins weiter um die erste Ansicht des Teils zu bekommen
Set swView = swView.GetNextView


'Nun holen wir das Modell aus der Ansicht (es kann eine Baugruppe oder ein Teil sein)
Set swModelRef = swView.ReferencedDocument
'und schalten auf die gleiche Konfiguration wie in der Zeichnung
swModelRef.ShowConfiguration2 (swView.ReferencedConfiguration)


'Wir ziehen uns den ConfigurationsManager des Modells...
Set swConfigMgr = swModelRef.ConfigurationManager
'... und daraus die aktuell aktive Konfiguration
Set swConfig = swConfigMgr.ActiveConfiguration
Debug.Print "Name der aktiven Konfiguration " & swConfig.Name


'Wir holen uns die konfigurationsspezifischen Eigenschaften...
Set swCustPrpMgr = swModelRef.Extension.CustomPropertyManager(swConfig.Name)
'konfigurationsspezifischen Eigenschaft auslesen
boolstatus = swCustPrpMgr.Get4("NR", False, val1, valout1)


'Wenn in den konfigurationsspezifischen Eigenschaften kein Wert für "NR" gefunden wurde, dann...
If Trim(val1) = "" Then
'... die benutzerdefinierten Eigenschaften holen
Set swCustPrpMgr = swModelRef.Extension.CustomPropertyManager("")
'benutzerdefinierte Eigenschaft auslesen
boolstatus = swCustPrpMgr.Get4("NR", False, val1, valout1)
End If


'Wenn der Wert immernoch leer ist, dann Fehler und raus
If Trim(val1) = "" Then
swApp.SendMsgToUser ("Es wurde keine Eigenschaft -Nr- gefunden" & vbCrLf & "Das Makro wird beendet")
Exit Sub
End If

'Das ganze nochmal für die Benennung
'Wir ziehen uns den ConfigurationsManager des Modells für die Benennung...
Set swConfigMgr = swModelRef.ConfigurationManager
'... und daraus die aktuell aktive Konfiguration
Set swConfig = swConfigMgr.ActiveConfiguration
Debug.Print "Name der aktiven Konfiguration " & swConfig.Name


'Wir holen uns die konfigurationsspezifischen Eigenschaften...
Set swCustPrpMgr = swModelRef.Extension.CustomPropertyManager(swConfig.Name)
'konfigurationsspezifischen Eigenschaft auslesen
boolstatus = swCustPrpMgr.Get4("Benennung", False, val2, valout2)

'Wenn in den konfigurationsspezifischen Eigenschaften kein Wert für "Benennung" gefunden wurde, dann...
If Trim(val2) = "" Then
'... die benutzerdefinierten Eigenschaften holen
Set swCustPrpMgr = swModelRef.Extension.CustomPropertyManager("")
'benutzerdefinierte Eigenschaft auslesen
boolstatus = swCustPrpMgr.Get4("Benennung", False, val2, valout2)
End If


'Wenn der Wert immernoch leer ist, dann Fehler und raus
If Trim(val2) = "" Then
swApp.SendMsgToUser ("Es wurde keine Eigenschaft -Benennung- gefunden" & vbCrLf & "Das Makro wird beendet")
Exit Sub
End If


'Prüfen auf ungültige Zeichen
    For i = 1 To Len(WrongChar)
        If InStr(valout2, Mid(WrongChar, i, 1)) Then
            MsgBox ("Ungültiges Zeichen in -Benennung- enthalten."), vbInformation, "Hinweis"
            Exit For
            Exit Sub
        End If
        If InStr(valout1, Mid(WrongChar, i, 1)) Then
            MsgBox ("Ungültiges Zeichen in -NR- enthalten."), vbInformation, "Hinweis"
            Exit For
            Exit Sub
        End If
    Next i

'###############################
'Zeichnung speichern als PDF
'###############################


'Prüfen ob am Zielpfad der Ordner PDF existiert, ansonsten einen Ordner erzeugen
If Dir(Filepath & "PDF", vbDirectory) = "" Then
MkDir Filepath & "PDF"
End If

'Nun die Zeichnung mit der der Nummer als Namen speichern
boolstatus = swDraw.SaveAs3(Filepath & "PDF\" & Trim(valout1) & "_" & Trim(valout2) & "_" & (Format(Date, "yyyy-mm-dd")) & ".pdf", 0, 0)


'###############################
'Modell speichern als STEP
'###############################

'Prüfen ob am Zielpfad der Ordner STEP existiert, ansonsten einen Ordner erzeugen
If Dir(Filepath & "STEP", vbDirectory) = "" Then
MkDir Filepath + "STEP"
End If

'Nun das Teil mit der Nummer als Namen speichern
boolstatus = swModelRef.SaveAs3(Filepath & "STEP\" & Trim(valout1) & "_" & Trim(valout2) & "_" & (Format(Date, "yyyy-mm-dd")) & ".STEP", 0, 0)

End Sub


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