| | | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für SOLIDWORKS | | | | Cloud for All - Neue Vorteile in Ihrer SOLIDWORKS Lizenz |
Autor
|
Thema: Dateinamen aus Dateieigenschaften erstellen (3488 mal gelesen)
|
Benny2k03 Mitglied Maschinenbau-Techniker
Beiträge: 11 Registriert: 07.12.2011
|
erstellt am: 15. Jan. 2014 17:00 <-- editieren / zitieren --> Unities abgeben:
Hallo zusammen. Ich arbeite mit SWX2013 SP0.0 und stehe im Moment vor der Aufgabe, dass ca. 300 Artikel als Step importiert und unter unserer Artikelnummer abgelegt werden müssen. Zu diesem Zweck habe ich bereits eine Eigenschaftskarte erstellt, in der ich die entsprechenden Eingaben mache. Ich suche nun nach einer Möglichkeit (z.B. Makro), mit der es möglich ist die importierte Step-Datei unter einem Dateinamen abzuspeichern, welcher sich aus unterschiedlichen Einträgen in den Bauteileigenschaften zusammen setzt. Bsp.: Eigenschaften: Typ: BS2 Durchmesser: 005 lfd. Nummer: 001 Material: NBR Rev. Stand: R1 Vergleichsartikelnummer: (1.012.03) Der Dateiname sollte dann wie folgt lauten: BS2-005-001-NBR-R1-(1.012.03) Die Ablage erfolgt in einem definierten Ordner (alle 300 Dateien) Mit Makroprogrammierung habe ich nur sehr wenig Erfahrung. Daher bräuchte ich in diesem Bereich starke Unterstützung um es entsprechend umsetzen zu können.
Vielleicht hat ja jemand eine Idee wie dieses Problem zu lösen ist...dann müsste ich die Daten nur 1x eintragen und alles wird in den vorgesehenen Ordner kopiert.
Danke schonmal im Voraus. Gruß Benny Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
JoergKirchner Mitglied Dipl.-Ing.
Beiträge: 174 Registriert: 18.06.2001 SWX2022 Edu - Dell Precision M4800
|
erstellt am: 16. Jan. 2014 07:57 <-- editieren / zitieren --> Unities abgeben: Nur für Benny2k03
Hallo, ein fertiges Programm wird dir wohl keiner schreiben .... Ich stocher da auch immer nur so ein bischen rum. Meine "high end specialist resource" ist immer der Stefan Berlitz :-) Da gibt es ein Macro das du dir anschauen solltes. http://solidworks.cad.de/prog_schriftfeld.htm Das füllt aus den eigenschaften Felder in der Maske, mit ein bischen umbennen füllt der bestimmt deine Daten da rein. Dann nur noch unten den Dateinamen aus den Feldern zusammenbauen und wieder speichern. Nach ein paar Tagen üben bist du schlauer und fertig ------------------ http://www.braun.com 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: 16. Jan. 2014 11:44 <-- editieren / zitieren --> Unities abgeben: Nur für Benny2k03
Hallo Benny Im SWX-Forum gibt es dazu einen Thread -> https://forum.solidworks.com/thread/33314 Hier der VBA-Code aus der Lösung:
Code: Sub main() Dim swApp As SldWorks.SldWorks Dim SWmoddoc As SldWorks.ModelDoc2 Dim partnumber As String Set swApp = Application.SldWorks Set SWmoddoc = swApp.ActiveDoc 'Use this....To Get the value from the Properties in the CUSTOM tab partnumber = SWmoddoc.CustomInfo("Number") 'Or this....To Get the value from the Configuration Specific Tab 'partnumber = SWmoddoc.GetCustomInfoValue("Default", "Number") 'this gets the full path of the current open document (including filename) PathName = SWmoddoc.GetPathName 'uses to full pathname to get the folder path, to be added to the save as file name Filepath = Left(PathName, InStrRev(PathName, "\")) If (SWmoddoc.GetType = swDocASSEMBLY) Then SWmoddoc.SaveAs (Filepath + partnumber + ".sldasm") ElseIf (SWmoddoc.GetType = swDocPART) Then SWmoddoc.SaveAs (Filepath + partnumber + ".sldprt") End If End Sub
Gruss Andreas ------------------ 21 ist nur die halbe Antwort. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Benny2k03 Mitglied Maschinenbau-Techniker
Beiträge: 11 Registriert: 07.12.2011
|
erstellt am: 16. Jan. 2014 14:45 <-- editieren / zitieren --> Unities abgeben:
Hallo! Danke erstmal für die schnelle Hilfe!!! Echt super! Ich habe folgendes geschrieben, was soweit auch funktioniert: Code: Sub main() Dim swApp As SldWorks.SldWorks Dim SWmoddoc As SldWorks.ModelDoc2 Set swApp = Application.SldWorks Set SWmoddoc = swApp.ActiveDoc 'Modelleigenschaften auslesen Vergleichsartikelnummer = SWmoddoc.GetCustomInfoValue("Default", "Vergleichsartikelnummer") Saugertyp = SWmoddoc.GetCustomInfoValue("Default", "Saugertyp") Saugerdurchmesser = SWmoddoc.GetCustomInfoValue("Default", "Saugerdurchmesser") Nummer = SWmoddoc.GetCustomInfoValue("Default", "Nummer") Revisionsstand = SWmoddoc.GetCustomInfoValue("Default", "Revisionsstand") ' Material = SWmoddoc.GetCustomInfoValue("Default", "Material") ' Dateiname aus den Eigenschaften zusammensetzen und speichern SWmoddoc.SaveAs (Saugertyp + "-" + Saugerdurchmesser + "-" + Nummer + "-" + Revisionsstand + " (" + Vergleichsartikelnummer + ")" + ".sldprt") End Sub
Was mir jetzt noch fehlen würde wären zwei Sachen: 1.) Die Datei muss in einen speziellen Ordner abgelegt werden. Den Pfad dazu kann ich im Makro fest vorgeben 2.) Es wäre schön wenn die Dateinamen vorher noch abgeglichen werden. Nicht das die Datei evtl. schon vorhanden ist und dann einfach überschrieben wird. Ich habe mich an diesen zwei Punkten schon versucht, aber ohne die richtige Syntax habe ich das einfach nicht hinbekommen. 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: 16. Jan. 2014 15:57 <-- editieren / zitieren --> Unities abgeben: Nur für Benny2k03
Hallo Benny, Zitat: Original erstellt von Benny2k03: 1.) Die Datei muss in einen speziellen Ordner abgelegt werden. Den Pfad dazu kann ich im Makro fest vorgeben
Vorher eine Variable oder Konstante festlegen und im SaveAs eifach mit angeben: Code: Sub main() Dim swApp As SldWorks.SldWorks Dim SWmoddoc As SldWorks.ModelDoc2 Dim Pfad as String Pfad = "c:\temp\" Set swApp = Application.SldWorks Set SWmoddoc = swApp.ActiveDoc 'Modelleigenschaften auslesen Vergleichsartikelnummer = SWmoddoc.GetCustomInfoValue("Default", "Vergleichsartikelnummer") Saugertyp = SWmoddoc.GetCustomInfoValue("Default", "Saugertyp") Saugerdurchmesser = SWmoddoc.GetCustomInfoValue("Default", "Saugerdurchmesser") Nummer = SWmoddoc.GetCustomInfoValue("Default", "Nummer") Revisionsstand = SWmoddoc.GetCustomInfoValue("Default", "Revisionsstand") ' Material = SWmoddoc.GetCustomInfoValue("Default", "Material") ' Dateiname aus den Eigenschaften zusammensetzen und speichern SWmoddoc.SaveAs (Pfad & Saugertyp + "-" + Saugerdurchmesser + "-" + Nummer + "-" + Revisionsstand + " (" + Vergleichsartikelnummer + ")" + ".sldprt") End Sub
Zur anderen Frage: Zitat: Original erstellt von Benny2k03: 2.) Es wäre schön wenn die Dateinamen vorher noch abgeglichen werden. Nicht das die Datei evtl. schon vorhanden ist und dann einfach überschrieben wird.
Auf http://www.vb-tec.de/fdexists.htm sind einige schöne, kurze Funktionen für so etwas, z.B. die FileExists. Die einfach mit ins Makro hängen und vorher damit checken Code: Sub main() [...] Dim FileFullPath as string FileFullPath = Pfad & Saugertyp + "-" + Saugerdurchmesser + "-" + Nummer + "-" + Revisionsstand + " (" + Vergleichsartikelnummer + ")" + ".sldprt" If FileExists(FileFullPath) Then Msgbox "Ups, Datei existiert schon und ein Überschreiben würde ein Loch im Raum-Zeit-Kontinuum aufreißen ..." Else ' Dateiname aus den Eigenschaften zusammensetzen und speichern SWmoddoc.SaveAs FileFullPath End If End Sub Public Function FileExists(Path As String) As Boolean Const NotFile = vbDirectory Or vbVolume On Error Resume Next FileExists = (GetAttr(Path) And NotFile) = 0 On Error Goto 0 End Function
Ich hab's jetzt einfach so im Beitragseditor runtergeschrieben, also kann sein, das irgendwelche Syntaxfehler drin, aber ich denke, du bekommst eine Idee wie es funktionieren kann. Ciao, Stefan ------------------ Inoffizielle deutsche SolidWorks Hilfeseite http://solidworks.cad.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
JoergKirchner Mitglied Dipl.-Ing.
Beiträge: 174 Registriert: 18.06.2001 SWX2022 Edu - Dell Precision M4800
|
erstellt am: 16. Jan. 2014 16:27 <-- editieren / zitieren --> Unities abgeben: Nur für Benny2k03
|
Benny2k03 Mitglied Maschinenbau-Techniker
Beiträge: 11 Registriert: 07.12.2011
|
erstellt am: 16. Jan. 2014 21:17 <-- editieren / zitieren --> Unities abgeben:
Danke, das funktioniert nach ein bischen Anpassung bis auf ein kleines Detail genau so wie ich mir das gedacht habe! Ein Problem ist jetzt jedoch noch, dass der Dateiname zwar überprüft wird und auch das Loch im Raum Zeit Kontinuum entsteht, sprich die Fehlermeldung kommt, die Datei aber dennoch überschrieben wird. Dabei ist egal ob man die Meldung mit OK oder "X" abschließt. Schöner wäre natürlich wenn der Speichervorgang nicht zu Ende gebracht werden würde. Den Meldetext könnte man entsprechend anpassen, sodass man weiß das man die Eigenschaften ändern muss um einen validen Dateinamen zu bekommen. Die Königsklasse wäre natürlich noch wenn man einen bestimmten String hier z.B. 001 abfragen könnte, da es sich hier um eine in den Eigenschaften manuell eingegebene fortlaufende Nummer handelt, welche nur ein mal existieren sollte. Dann wären alle Fehlermöglichkeiten was die Dateiablage angeht gelöst! Ich habe mich ja noch nie wirklich mit dem Thema VBA auseinandergesetzt, aber ich finde selbst an so einem kleinen Beispiel die Möglichkeiten fantastisch...und das ist ja nur die Spitze des Eisberges! :-)
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. Jan. 2014 09:27 <-- editieren / zitieren --> Unities abgeben: Nur für Benny2k03
Hallo Benny, Zitat: Original erstellt von Benny2k03: [...] die Datei aber dennoch überschrieben wird. Dabei ist egal ob man die Meldung mit OK oder "X" abschließt. Die Königsklasse wäre natürlich noch wenn man einen bestimmten String hier z.B. 001 abfragen könnte, da es sich hier um eine in den Eigenschaften manuell eingegebene fortlaufende Nummer handelt, welche nur ein mal existieren sollte. Dann wären alle Fehlermöglichkeiten was die Dateiablage angeht gelöst!
Zum ersten Teil: dann machst du zwar die Abfrage, ignorierst aber die Antwort. Bei der Variante wie oben in meinem Beitrag wäre das unmöglich, weil entweder (if) die Meldung kommt oder (else) die Datei gespeichert wird. Da musst du also irgendwo in deinem Code was falsch haben, und das ist ohne deinen Code nicht so einfach zu sehen. Das zweite ist auch nicht schwieriger, ob du nun einen String vergleichst oder auf die Existenz einer Datei prüfst, du musst nur die Logik in deinem Code richtig hinbekommen. Zitat: Original erstellt von Benny2k03: Ich habe mich ja noch nie wirklich mit dem Thema VBA auseinandergesetzt, aber ich finde selbst an so einem kleinen Beispiel die Möglichkeiten fantastisch...und das ist ja nur die Spitze des Eisberges! :-)
Oh ja, das ist nur die Spitze des Eisbergs. Programmieren ist nicht so schwer, die ersten Schritte sind manchmal etwas mühsam, wenn man sich gleichzeitig an Syntax (wie wird was geschrieben) und Semantik (was bedeutet es, welche Logik steckt dahinter) heranwagt. Falls du erst mal ein wenig spielerisch die ersten Schritte Richtung Programmierung angehen willst empfehle ich so etwas wie http://code.org/learn . Auch Robomind oder Lightbot finde ich toll, und wir verraten einfach keinem, dass das hauptsächlich für Kinder als Einsteig ins Programmieren entwickelt wurde und deswegen mehr Spaß macht als VBA-Syntax zu lernen Ciao, Stefan ------------------ Inoffizielle deutsche SolidWorks Hilfeseite http://solidworks.cad.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
|