Solidworks PDF-tekeningmacro

Hallo mevrouw, meneer,

Ik nam deze macro op het net om mijn tekeningen direct op te slaan in pdf.
Helaas weet ik als beginner in het veld niet hoe ik het pad aan de recordmap van mijn tekeningen moet toevoegen.

Kan iemand mij vertellen hoe ik verder moet gaan?

Hier is de macro die ik heb gevonden als het helpt, het werkt, maar slaat PDF's op in dezelfde map als mijn SW-tekeningen.

Bij voorbaat dank!

Vriendelijke groeten


Dim swApp als object
Sub hoofd()
Dim swApp als SldWorks.SldWorks
Dim swModel als SldWorks.ModelDoc2
Dim swExportPDFData As SldWorks.ExportPdfData
Dim strFilename als tekenreeks
Dim status Als Booleaans
Dim fouten zo lang, waarschuwingen zo lang
Stel swApp = Toepassing.SldWorks in
Stel swModel = swApp.ActiveDoc in
'Opslaan
status = swModel.Save3(swSaveAsOptions_e.swSaveAsOptions_Silent, fouten, waarschuwingen)
'Exporteer naar PDF als het een tekening is
Als (swModel.GetType = swDocDRAWING) Dan
strFilename = swModel.GetPathName
strFilename = Links(strBestandsnaam, Len(strBestandsnaam) - 6) & "pdf"
Stel swExportPDFData = swApp.GetExportFileData(1) in
swModel.Extension.SaveAs strFilename, 0, 0, swExportPDFData, 0, 0
Einde als
Einde Sub

Geïnspireerd door het antwoord van @Cyril_f :

Deze (niet-geteste) code zou moeten werken

Dim swApp As Object
Sub main()
Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim swExportPDFData As SldWorks.ExportPdfData
Dim strFilename As String
Dim status As Boolean
Dim errors As Long, warnings As Long
Set swApp = Application.SldWorks
Set swModel = swApp.ActiveDoc
'Save
status = swModel.Save3(swSaveAsOptions_e.swSaveAsOptions_Silent, errors, warnings)
'Export to PDF if it is a drawing
If (swModel.GetType = swDocDRAWING) Then
strFilename = swModel.GetPathName
strFilename =  Mid(strFilename, InStrRev(strFilename, "\") + 1) 'Purge le chemin d'accès
strFilename = Environ("userprofile") & "\Desktop\" & strFilename 'Ajoute le bureau comme chemin en remplaçement (A modifier si besoin Ex: strFilename ="C:\Temp\strFilename
strFilename = Left(strFilename, Len(strFilename) - 6) & « pdf »
Set swExportPDFData = swApp.GetExportFileData(1)
swModel.Extension.SaveAs strFilename, 0, 0, swExportPDFData, 0, 0
End If
End Sub

2 likes

Goedenavond

Staat, naast de reactie van @sbadenis, het opnamepad vast of niet?
De aangeboden code wordt opgeslagen op het bureaublad.

2 likes

Hallo Cyril,

Het pad bevindt zich in een map die is gewijd aan het plan in PDF, die verschilt van die in SW-formaat.
Maar na verloop van tijd zal de locatie veranderen omdat ik in mappen van 1000 plannen werk en het gaat heel snel. (map in een dedicated server)

Ik weet ook niet zeker of ik begreep wat ik moest doen in de @sbadenis macro en waar ik mijn pad moest toevoegen :sweat_smile:

Hartelijk dank voor uw antwoorden.

Vriendelijke groeten

Het pad was al hard toegevoegd (aan het bureaublad)
Hoe wil je macro gebruiken?
Geval nr. 1 bestand voor bestand vraagt de macro u of u uw bestand in elk bestand wilt opslaan (wat snel hoofdpijn kan zijn als u 100 bestanden moet opslaan)
Geval nr. 2 in een subdirectory van uw dossier (altijd identiek)
Geval nr. 3 (degene die ik had gekozen) op het bureaublad (voeg indien nodig Kaarten / toe achter het bureaublad om een map op het bureaublad te hebben).

3 likes

Oke, bedankt voor de verduidelijking.

Ik heb een PDF-tekenmap en binnenin heb ik verschillende mappen gerangschikt in stappen van 1000 pdf-plannen.

Voorbeeld:

  • 1-1000
  • 1001-2000
  • 2001-3000

Ik denk dat ik ga om de macro knop te zetten in mijn werkbalk en het zal opslaan op de locatie die ik heb gekozen en ik zal het daarna veranderen.

Ik hoef alleen maar het pad naar kantoor te vervangen door het pad dat ik wil, als ik het goed begrijp, zal ik het proberen.
Mijn huidige pad is als volgt:
O:\SolidWorks Database\03-PDF-bibliotheek\18001-19000

Heel erg bedankt Denis voor je antwoord.

Vriendelijke groeten

In dit geval verander je deze regel:

strFilename = Environ("userprofile") & "\Desktop\" & strFilename 'Ajoute le bureau comme chemin en remplaçement (A modifier si besoin Ex: strFilename ="C:\Temp\strFilename

Door '''
strFilename = "O:\SolidWorks Base\03-PDF Library\18001-19000" & strFilename

Et le jour ou tu aura dépassé tes 1000 tu changes de nouveau cette ligne dans la macro
2 likes

Helaas werkt het niet

Inderdaad, er was een fout er ontbrak een \ na 19000, hier is de code gewijzigd en compleet en getest:

Dim swApp As Object
Sub main()
Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim swExportPDFData As SldWorks.ExportPdfData
Dim strFilename As String
Dim status As Boolean
Dim errors As Long, warnings As Long
Set swApp = Application.SldWorks
Set swModel = swApp.ActiveDoc
'Save
status = swModel.Save3(swSaveAsOptions_e.swSaveAsOptions_Silent, errors, warnings)
'Export to PDF if it is a drawing
If (swModel.GetType = swDocDRAWING) Then
strFilename = swModel.GetPathName
strFilename = Mid(strFilename, InStrRev(strFilename, "\") + 1)  'Purge le chemin d'accès
strFilename = "O:\Base SolidWorks\03-Bibliothèque PDF\18001-19000\" & strFilename
strFilename = Left(strFilename, Len(strFilename) - 6) & "pdf"
Debug.Print strFilename
Set swExportPDFData = swApp.GetExportFileData(1)
swModel.Extension.SaveAs strFilename, 0, 0, swExportPDFData, 0, 0
End If
End Sub

U moet ook de map 18001-19000 al hebben voordat u de macro start

1 like

O ja! Goed gedaan :sweat_smile:

Het is perfect, het werkt!

Hartelijk dank!

Uit nieuwsgierigheid, zou het complex zijn om automatisch het juiste bestand naar de macro te vinden wanneer ik de mijlpaal van de plannummers ben gepasseerd?

Als u uw nummer in de naam van de kamer vindt, is dat vrij eenvoudig te doen.
door net onder deze regel toe te voegen:

strFilename = Mid(strFilename, InStrRev(strFilename, "\") + 1)  'Purge le chemin d'accès

U krijgt de 2 1e cijfers en wij wijzigen de naam van de map dienovereenkomstig.
Het zou een paar regels code toevoegen, maar niets bijzonders.
Aan de andere kant moet u het bestand ook maken als het niet bestaat.

Oké, ik denk dat ik het principe begrijp.

Momenteel werk ik, zoals eerder vermeld, met mappen die precies zo zijn genoemd: (ik maak ze van tevoren aan)

17001-18000
18001-19000
19001-20000

Ik moet de naam van mijn mappen wijzigen om de macro te laten werken?

Nee, voor mij is het mogelijk via macro, maar het zou een paar regels code toevoegen en je moet er zeker van zijn dat de bestandsnaam van de MEP ook wordt opgenomen in de waarden die door de map worden aangegeven (bijvoorbeeld 18001.slddrw-> map 18001-19000)
Kun je als voorbeeld de exacte naam van een tekening geven?
Omdat het idee zou zijn om via macro het 1e cijfer op te halen en deze cijfers te volgen om op te slaan in de bestaande map of om de map te maken als we naar de volgende duizend gaan.

1 like

Hier is de gewijzigde code voor het automatisch aanmaken van de mapnaam als de MEps inderdaad in deze vorm zijn:
18001.slddrw, 19000.slddrw of 20000.slddrw...

Dim swApp As Object
Sub main()
Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim swExportPDFData As SldWorks.ExportPdfData
Dim strFilename As String
Dim FolderName As String
Dim status As Boolean
Dim errors As Long, warnings As Long
Set swApp = Application.SldWorks
Set swModel = swApp.ActiveDoc
'Save
status = swModel.Save3(swSaveAsOptions_e.swSaveAsOptions_Silent, errors, warnings)
'Export to PDF if it is a drawing
If (swModel.GetType = swDocDRAWING) Then
strFilename = swModel.GetPathName
strFilename = Mid(strFilename, InStrRev(strFilename, "\") + 1)  'Purge le chemin d'accès
FolderName = Left(strFilename, Len(strFilename) - 7)
Debug.Print Right(FolderName, Len(FolderName) - 2)
If Right(FolderName, Len(FolderName) - 2) = "000" Then

'Si la MEP se termine par 000 on créer le dossier avec avec comme début de N° FolderName-1
FolderName = (Left(FolderName, Len(FolderName) - 3) - 1) & "001-" & (Left(FolderName, Len(FolderName) - 3)) & "000"
Else

'Si la MEP ne se termine pas par 000 on créer le dossier avec comme début de N° FolderName
FolderName = Left(FolderName, Len(FolderName) - 3) & "001-" & (Left(FolderName, Len(FolderName) - 3) + 1) & "000"
End If
FolderName = "O:\Base SolidWorks\03-Bibliothèque PDF\" & FolderName & "\"

'On vérifie si le dossier de sauvegarde existe sinon création de ce dossier
If Dir(FolderName, vbDirectory + vbHidden) = "" Then
    MkDir FolderName
    End If



strFilename = FolderName & strFilename
strFilename = Left(strFilename, Len(strFilename) - 6) & "pdf"
Debug.Print strFilename
Set swExportPDFData = swApp.GetExportFileData(1)
swModel.Extension.SaveAs strFilename, 0, 0, swExportPDFData, 0, 0
End If
End Sub
1 like

Ja, mijn tekenbestanden hebben de toepasselijke naam.

Ik heb een test kunnen doen en het werkt perfect.

Nogmaals bedankt voor je hulp, het is echt leuk :grin:

1 like