| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für SOLIDWORKS |
| |
| Moderne CAx Entwicklungsmethoden: Generatives Design, Gitternetzstrukturen & MBD, ein Webinar am 11.10.2024
|
Autor
|
Thema: Beim Speichern individueller Pfad zugreifen VBA (1747 / mal gelesen)
|
4kspeed Mitglied
Beiträge: 91 Registriert: 27.10.2016
|
erstellt am: 24. Aug. 2017 08:40 <-- editieren / zitieren --> Unities abgeben:
Hallo, mit meiner Beispiel Makro speichere ich die Zeichnung bisher in ein bestimmtes Verzeichniss (C:\Test) als pdf ab. Code: Dim swApp As SldWorks.SldWorks Dim swModel As SldWorks.ModelDoc2 Dim swDraw As SldWorks.DrawingDoc Dim swCustProp As CustomPropertyManager Dim valOut As String Dim resolvedValOut As String Dim Filepath As String Dim FileName As StringSub main() Set swApp = Application.SldWorks Set swDraw = swApp.ActiveDoc ' Check to see if a drawing is loaded. If (swDraw Is Nothing) Or (swDraw.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 swView = swDraw.GetFirstView Set swView = swView.GetNextView Set swModel = swView.ReferencedDocument Set Sheet = swApp.ActiveDoc.GetCurrentSheet Set swCustProp = swModel.Extension.CustomPropertyManager("")
swCustProp.Get2 "PD-Nr.", valOut, resolvedValOut 'Change the custom property name here Filepath = "C:\Test" ' Change File Path here Filepath = Filepath + "\" FileName = Left(swDraw.GetTitle, Len(swDraw.GetTitle) - 9) swDraw.SaveAs (Filepath + FileName + resolvedValOut + ".pdf") 'Change the custom property text here End Sub
In den Test Ordner habe ich folgende 3 Unter Ordner angelegt
01_Bestellung_Blech_Nr_0015600156 02_Bestellung_Rohr_Nr_00159 03_Bestellung_Stange_Nr_00186 Ziel soll es sein die pdf in einem Ordner abzuspeichern, die ständig umbenannt wird, nur die Nummer wird geändert (01_Bestellung_Blech_Nr_XXXXX)
Wie kann ich in VBA Makro sagen er soll die pdf in 01_Bestellung_Blech_Nr_ abspeichern egal welche Nr dahinten dran steht? mit * funktionierts leider nicht Code: Filepath = "C:\Test\01_Bestellung_Blech_Nr_*" ' Change File Path here Filepath = Filepath + "\"
was mache ich da falsch?
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Christian_W Ehrenmitglied V.I.P. h.c. Konstrukteur (Dipl-Ing)
Beiträge: 3256 Registriert: 04.04.2001 CSWP 12/2015<P>SWX2021sp5 Win10/11 (SWX2016, SWX2012) proAlpha6.2e00/calinkV9 (Tactonworks) (Medusa7, NesCAD2010, solidEdge19)
|
erstellt am: 24. Aug. 2017 09:41 <-- editieren / zitieren --> Unities abgeben: Nur für 4kspeed
ich glaub, du solltest mit dir den Pfad vervollständigen und dann weitermachen. Syntax passt nicht aber ungefähr so: filepath = dir (c:\...*) dann noch "\" und den Dateinamen dranbasteln ... Gruß, Christian Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
4kspeed Mitglied
Beiträge: 91 Registriert: 27.10.2016
|
erstellt am: 24. Aug. 2017 10:10 <-- editieren / zitieren --> Unities abgeben:
Hallo Christian, den Dateinamen dran bastteln ist nicht mein Problem. Ich will in unvollständigen Pfad abspeichern, somit müsste man jedes mal in Makro die Nr. ändern. Vorgegeben ist nur ein Teil dieser Pfad C:\Test\01_Bestellung_Blech_Nr_ Mit dir () funktioniert nicht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Christian_W Ehrenmitglied V.I.P. h.c. Konstrukteur (Dipl-Ing)
Beiträge: 3256 Registriert: 04.04.2001 CSWP 12/2015<P>SWX2021sp5 Win10/11 (SWX2016, SWX2012) proAlpha6.2e00/calinkV9 (Tactonworks) (Medusa7, NesCAD2010, solidEdge19)
|
erstellt am: 24. Aug. 2017 11:43 <-- editieren / zitieren --> Unities abgeben: Nur für 4kspeed
nach vba-hilfe würde ich meinen: Filepath = Dir("C:\Test\01_Bestellung_Blech_Nr_*") sollte den Pfad liefern ... evtl muss noch dran, dass es ein Verzeichnis ist ... probier doch mal Filepath = Dir("C:\Test\01_Bestellung_Blech_Nr_*", vbDirectory) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
HartmutT Mitglied Dipl.-Ing (TU) MB
Beiträge: 790 Registriert: 16.06.2006 SWX 2019 SP5.0 MaxxDB 2021.SP0.02 Linked Jan 18 2021 (64bit)
|
erstellt am: 24. Aug. 2017 14:12 <-- editieren / zitieren --> Unities abgeben: Nur für 4kspeed
Hi Gemeinde! Für mich riecht das nach einer sogenannten Erstbefüllung mit Laufwerk, Pfad und Dateiname, die individuell erweitert werden kann. Dann schlage ich vor, geh so vor wie im Makro (bei Makromania) EXPORT_AS von Thomas Weith Pathnamebox mit Erstbefüllung Filenamebox mit Erstbefüllung in einer Abfrage, die kann man dann individuell erweitern und ist flexibel in Pfad und Filenamen. Good Luck, H. ------------------ Hartmut Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
4kspeed Mitglied
Beiträge: 91 Registriert: 27.10.2016
|
erstellt am: 25. Aug. 2017 08:25 <-- editieren / zitieren --> Unities abgeben:
|
Christian_W Ehrenmitglied V.I.P. h.c. Konstrukteur (Dipl-Ing)
Beiträge: 3256 Registriert: 04.04.2001 CSWP 12/2015<P>SWX2021sp5 Win10/11 (SWX2016, SWX2012) proAlpha6.2e00/calinkV9 (Tactonworks) (Medusa7, NesCAD2010, solidEdge19)
|
erstellt am: 28. Aug. 2017 11:08 <-- editieren / zitieren --> Unities abgeben: Nur für 4kspeed
|
Christian_W Ehrenmitglied V.I.P. h.c. Konstrukteur (Dipl-Ing)
Beiträge: 3256 Registriert: 04.04.2001 CSWP 12/2015<P>SWX2021sp5 Win10/11 (SWX2016, SWX2012) proAlpha6.2e00/calinkV9 (Tactonworks) (Medusa7, NesCAD2010, solidEdge19)
|
erstellt am: 28. Aug. 2017 11:43 <-- editieren / zitieren --> Unities abgeben: Nur für 4kspeed
Sorry, Kleinigkeit übersehen. Dir liefert nur den Unterverzeichnisnamen zurück, nicht den kompletten Pfad. d.h. den musst du jedesmal noch zusammensetzen. also müsste gehen: vorpfad = "C:\Test\" filepath = vorpfad + dir(vorpfad + "01*", vbDirectory) + "\" Gruß, Christian Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
4kspeed Mitglied
Beiträge: 91 Registriert: 27.10.2016
|
erstellt am: 29. Aug. 2017 07:06 <-- editieren / zitieren --> Unities abgeben:
Klasse es geht! THX Christian!!! Was ich jetzt noch festgestellt habe, er überschreibt die vorhandene pdf/dxf einfach. Kann VBA mir keine Rückmeldung geben falsch die pdf doch schon gibt (abbrechen ja/nein)? Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bk.sc Ehrenmitglied V.I.P. h.c. Konstrukteur Sondermaschinenbau
Beiträge: 2795 Registriert: 18.07.2012 -Solid Works 2019 SP5 -Pro Engineer WF 3
|
erstellt am: 29. Aug. 2017 08:38 <-- editieren / zitieren --> Unities abgeben: Nur für 4kspeed
Hallo, verwendest du in der SaveAs Method (IModelDocExtension) die Option swSaveAsOptions_Silent? Weil diese Unterdrückt meines Wissens u.a. diese Meldung, evtl. hier mal die Option swSaveAsOptions_Copy probieren. Alternativ könntest du auch vorher einfach überprüfen ob die Datei vorhanden ist bevor du das Speichern durchführst. 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 |
Christian_W Ehrenmitglied V.I.P. h.c. Konstrukteur (Dipl-Ing)
Beiträge: 3256 Registriert: 04.04.2001 CSWP 12/2015<P>SWX2021sp5 Win10/11 (SWX2016, SWX2012) proAlpha6.2e00/calinkV9 (Tactonworks) (Medusa7, NesCAD2010, solidEdge19)
|
erstellt am: 29. Aug. 2017 09:37 <-- editieren / zitieren --> Unities abgeben: Nur für 4kspeed
Zitat: Kann VBA mir keine Rückmeldung geben falsch die pdf doch schon gibt (abbrechen ja/nein)?
entweder über die Optionen - siehe Bernds antwort oder wieder mit "dir" ungefähr so if not dir(fullpdfpathandfilename) = "" then umbenennen als backup irgendwie mit Index oder so ... endif saveas ... Gruß, Christian Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
4kspeed Mitglied
Beiträge: 91 Registriert: 27.10.2016
|
erstellt am: 01. Sep. 2017 13:19 <-- editieren / zitieren --> Unities abgeben:
Naja.. ich überprüfe vorher einfach nochmal nach ob die Dateien vorhanden sind. Problem meine Codes werden einfach zu lang und unübersichtlich, das möchte ich verhindern... da VBA noch eine neue Welt für mich ist. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |