Musisz edytować makro PDF

Cze wszystkim

Dostałem makro na forum, aby zapisać moje Solidworks MEP w PDF, mój problem polega na tym, że makro zmienia nazwę pliku PDF i nie chciałbym tego.

Usunąłem już linie, których nie potrzebuję, ale jeszcze nie jest dobrze...

Czy ktoś mógłby zmodyfikować makro tak, aby nazwa pliku pozostała taka jak MEP, chciałbym zachować 2 lokalizacje zapisu.

Makro:

' Definiujemy niezbędne zmienne
Dim swApp As Object
Dim swModel As SldWorks.ModelDoc2
Dim swCustProp As CustomPropertyManager
Dim valOut1 As String
Dim valOut2 As String
Dim valOut3 As String
Dim resolvedValOut1 As String
Dim resolvedValOut2 As String
Dim resolvedValOut3 As String
Przyciemnij ścieżkę jako ciąg
Przyciemnij ścieżkę do pulpitu jako ciąg
Dim swModelDocExt As SldWorks.ModelDocExtension
Dim swExportPDFData As SldWorks.ExportPdfData
Dim nFileName As Ciąg
Dim nFileName2 As Ciąg
Dim boolstatus As Boolean
Dim lErrors tak długo
Dim lOstrzeżenia tak długo
Dim lgFile As Integer

Sub main()
' Trzymamy się Solidworks
Ustaw swApp = Application.SldWorks

' Pobieramy aktywny dokument w Solidworks
Ustaw swModel = swApp.ActiveDoc

' Sprawdzamy, czy dokument jest otwarty w Solidworks
Jeśli swModel jest niczym, to
    MsgBox "Dokument musi być aktywny w Solidworks.", vbCritical
    Koniec
Zakończ jeżeli:

' Sprawdzamy, czy dokument otwarty w Solidworks jest planem
Jeśli swModel.GetType <> swDocDRAWING Następnie
    MsgBox "Aktywny dokument w Solidworks musi być planem.", vbCritical
    Koniec
Zakończ jeżeli:

' Sprawdzamy, czy otwarty plan w Solidworks jest zapisany
Jeśli swModel.GetPathName = "" Następnie
    swModel.Zapisz
Zakończ jeżeli:

' Pobieramy ścieżkę do folderu rejestracji planu
Ścieżka = swModel.GetPathName
lgFile = InStrRev(Ścieżka, "\", -1, vbTextCompare) - 1
Jeśli lgFile > 0, to
    Ścieżka = Lewo(Ścieżka, lgPlik)
Zakończ jeżeli:

' Odzyskujemy ścieżkę pulpitu systemu Windows
PathDesktop = Informacje("PROFIL UŻYTKOWNIKA") & "\Pulpit"

' Definiujemy parametry eksportu w PDF
Ustaw swModelDocExt = swModel.Extension
Ustaw swExportPDFData = swApp.GetExportFileData(1)
swExportPDFData.ViewPdfAfterSaving = Fałsz

' Definiujemy ścieżkę i nazwę pierwszego pliku pdf, który ma zostać utworzony
nFileName = Ścieżka & "\" & resolvedValOut1 & " - " & resolvedValOut2 & " - Ind." & resolvedValOut3 & " - " & dateNow & ".PDF"

' Zapisz pierwszy plik pdf
boolstatus = swModelDocExt.SaveAs(nNazwaPliku, 0, 0, swExportPDFData, lBłędy, lOstrzeżenia)

' Definiujemy ścieżkę i nazwę drugiego pliku pdf, który ma zostać utworzony
nFileName2 = PathDesktop & "\" & resolvedValOut1 & " - " & resolvedValOut2 & " - Ind." & resolvedValOut3 & " - " & dateNow & ".PDF"

' Zapisujemy drugi plik pdf
boolstatus = swModelDocExt.SaveAs(nFileName2, 0, 0, swExportPDFData, lErrors, lWarnings)

Koniec subwoofera

Z góry dziękuję.

 

Witam, przetestuj ten.

Mała precyzja, PDF i DWG zostaną zapisane w tym samym miejscu, w którym znajdowało się ostatnie nagranie. Mówiąc prostym językiem, przed uruchomieniem  Marco, zapisz swój plan , wykonując file=> zapisz jako, a następnie uruchom makro

Niech moc będzie z tobą


macro_pdf_-dwg.swp
3 polubienia

Oczywiście nie przegapisz wiele, po prostu dodaj debug.print, aby zobaczyć wartości swoich zmiennych:

 

' On définit les variables nécessaires
Dim swApp As Object
Dim swModel As SldWorks.ModelDoc2
Dim swCustProp As CustomPropertyManager
Dim valOut1 As String
Dim valOut2 As String
Dim valOut3 As String
Dim resolvedValOut1 As String
Dim resolvedValOut2 As String
Dim resolvedValOut3 As String
Dim Path As String
Dim PathDesktop As String
Dim swModelDocExt As SldWorks.ModelDocExtension
Dim swExportPDFData As SldWorks.ExportPdfData
Dim nFileName As String
Dim nFileName2 As String
Dim boolstatus As Boolean
Dim lErrors As Long
Dim lWarnings As Long
Dim lgFichier As Integer

Sub main()
' On se raccroche à Solidworks
Set swApp = Application.SldWorks

' On récupère le document actif dans Solidworks
Set swModel = swApp.ActiveDoc

' On vérifie qu'un document est bien ouvert dans Solidworks
If swModel Is Nothing Then
    MsgBox "Un document doit être actif dans Solidworks.", vbCritical
    End
End If

' On vérifie que le document ouvert dans Solidworks est un plan
If swModel.GetType <> swDocDRAWING Then
    MsgBox "Le document actif dans Solidworks doit être un plan.", vbCritical
    End
End If

' On vérifie que le plan ouvert dans Solidworks est bien enregistré
If swModel.GetPathName = "" Then
    swModel.Save
End If

' On récupère le chemin du dossier d'enregistrement du plan
Path = swModel.GetPathName
lgFichier = InStrRev(Path, "\", -1, vbTextCompare) - 1
If lgFichier > 0 Then
    Path = Left(Path, lgFichier)
End If

' On récupère le chemin du bureau Windows
PathDesktop = Environ("USERPROFILE") & "\Desktop"

' On définit les paramètres d'export en PDF
Set swModelDocExt = swModel.Extension
Set swExportPDFData = swApp.GetExportFileData(1)
swExportPDFData.ViewPdfAfterSaving = False

' On définit le chemin et le nom du premier fichier pdf à créer
nFileName = Path & "\" & resolvedValOut1 & " - " & resolvedValOut2 & " - Ind." & resolvedValOut3 & " - " & dateNow & ".PDF"
Debug.Print "nFileName=" & nFileName

' On sauvegarde le premier fichier pdf
boolstatus = swModelDocExt.SaveAs(nFileName, 0, 0, swExportPDFData, lErrors, lWarnings)

' On définit le chemin et le nom du deuxième fichier pdf à créer
nFileName2 = PathDesktop & "\" & resolvedValOut1 & " - " & resolvedValOut2 & " - Ind." & resolvedValOut3 & " - " & dateNow & ".PDF"
Debug.Print "nFileName2=" & nFileName2

' On sauvegarde le deuxième fichier pdf
boolstatus = swModelDocExt.SaveAs(nFileName2, 0, 0, swExportPDFData, lErrors, lWarnings)

End Sub

 

Następnie edytujesz swoje makro, dodajesz okno wykonywania, uruchamiasz makro i patrzysz na wartość swojej właściwości i zobaczysz, czy nie ma błędu w Twojej ścieżce (dla mnie problem tkwi w konkatenacji Twojej zmiennej NazwaPliku1 i 2)

Jeśli wartość zmiennej nie jest prawidłowa lub zawiera zabronione znaki, nie jest ona rejestrowana.

Ponadto w konkatenacji używasz zmiennych resolvedValOut1, 2 i 3, zadeklarowanych tak, jak powinny być w ciągu, ale których nie ma w twoim makrze, więc puste!

 

 

2 polubienia

Witam

Z tego co rozumiem potrzeba, myślę, że poniższy kod ją spełnia.

' On définit les variables nécessaires
Dim swApp As Object
Dim swModel As SldWorks.ModelDoc2
Dim swCustProp As CustomPropertyManager
Dim valOut1 As String
Dim valOut2 As String
Dim valOut3 As String
Dim resolvedValOut1 As String
Dim resolvedValOut2 As String
Dim resolvedValOut3 As String
Dim Path As String
Dim PathDesktop As String
Dim swModelDocExt As SldWorks.ModelDocExtension
Dim swExportPDFData As SldWorks.ExportPdfData
Dim nFileName As String
Dim nFileName2 As String
Dim boolstatus As Boolean
Dim lErrors As Long
Dim lWarnings As Long
Dim lgFichier As Integer

Sub main()
' On se raccroche à Solidworks
Set swApp = Application.SldWorks

' On récupère le document actif dans Solidworks
Set swModel = swApp.ActiveDoc

' On vérifie qu'un document est bien ouvert dans Solidworks
If swModel Is Nothing Then
    MsgBox "Un document doit être actif dans Solidworks.", vbCritical
    End
End If

' On vérifie que le document ouvert dans Solidworks est un plan
If swModel.GetType <> swDocDRAWING Then
    MsgBox "Le document actif dans Solidworks doit être un plan.", vbCritical
    End
End If

' On vérifie que le plan ouvert dans Solidworks est bien enregistré
If swModel.GetPathName = "" Then
    swModel.Save
End If

' On récupère le chemin du dossier d'enregistrement du plan
Path = swModel.GetPathName
lgFichier = InStrRev(Path, "\", -1, vbTextCompare) - 1
If lgFichier > 0 Then
    Path = Left(Path, lgFichier)
End If

' On récupère le chemin du bureau Windows
PathDesktop = Environ("USERPROFILE") & "\Desktop"

' On définit les paramètres d'export en PDF
Set swModelDocExt = swModel.Extension
Set swExportPDFData = swApp.GetExportFileData(1)
swExportPDFData.ViewPdfAfterSaving = False

' On définit le chemin et le nom du premier fichier pdf à créer
nFileName = left(Path, len(Path)-6) & "PDF" 'Retrait de l'extension SW en gardant le point et ajout PDF

' On sauvegarde le premier fichier pdf
boolstatus = swModelDocExt.SaveAs(nFileName, 0, 0, swExportPDFData, lErrors, lWarnings)

' On définit le chemin et le nom du deuxième fichier pdf à créer
nFileName2 = Mid(Path, InStrRev(Path, "\") + 1) 'purge le chemin d'accès du fichier d'origine
nFileName2 = PathDesktop & left(nFileName2, len(nFileName2)-6) & "PDF"

' On sauvegarde le deuxième fichier pdf
boolstatus = swModelDocExt.SaveAs(nFileName2, 0, 0, swExportPDFData, lErrors, lWarnings)

End Sub

 

2 polubienia

@ OBI WAN
Dzięki za makro, będę miał to pod pasem.

@Cyryl.f

Makro nie działa :-(

@ sbadenis

"Ponadto w swoim konkatenacji używasz zmiennych resolvedValOut1, 2 i 3, zadeklarowanych tak, jak powinny być w ciągu, ale których nie ma w twoim makrze, więc są puste!"

Tak, jego zmienne nie są dla mnie przydatne, usunąłem funkcje w powyższym makrze, ale zostawiłem je, ponieważ nie wiedziałem, co zamienić, aby zapisać o tej samej nazwie, co mój MAP.

Ale nagle twoje makro też nie działa.

2 polubienia

Witam

Mam funkcjonalne makro do tworzenia rysunków w PDF

Wysyłam go do Ciebie, jest obecnie uruchomiony w solidworks 2016

Pozwolę ci go zmodyfikować, jeśli będzie to konieczne

 


enregistrement_pdf.swp
1 polubienie

Jeśli wpiszesz debug.print i spojrzysz na wartości, możesz znaleźć błąd @Cyril.f, trochę szukając.

Oto kod funkcjonalny z debug.print, spójrz, jak wygląda w oknie wykonywania, a następnie, jeśli chcesz, możesz je skomentować lub nie, ponieważ tak naprawdę nie obciąża to małego makra, takiego jak to.

' On définit les variables nécessaires
Dim swApp As Object
Dim swModel As SldWorks.ModelDoc2
Dim Path As String
Dim PathDesktop As String
Dim swModelDocExt As SldWorks.ModelDocExtension
Dim swExportPDFData As SldWorks.ExportPdfData
Dim nFileName As String
Dim nFileName2 As String
Dim FileName As String
Dim boolstatus As Boolean
Dim lErrors As Long
Dim lWarnings As Long

'Dim lgFichier As Integer

Sub main()
' On se raccroche à Solidworks
Set swApp = Application.SldWorks

' On récupère le document actif dans Solidworks
Set swModel = swApp.ActiveDoc

' On vérifie qu'un document est bien ouvert dans Solidworks
If swModel Is Nothing Then
    MsgBox "Un document doit être actif dans Solidworks.", vbCritical
    End
End If

' On vérifie que le document ouvert dans Solidworks est un plan
If swModel.GetType <> swDocDRAWING Then
    MsgBox "Le document actif dans Solidworks doit être un plan.", vbCritical
    End
End If

' On vérifie que le plan ouvert dans Solidworks est bien enregistré
If swModel.GetPathName = "" Then
    swModel.Save
End If

' On récupère le chemin du dossier d'enregistrement du plan
Path = swModel.GetPathName

    
'on récupère le chemin complet sans le nom de fichier
FilePath = Left(Path, InStrRev(Path, "\"))
'Debug.Print "Filepath:" + Filepath
    
        
'on récupère le nom du fichier sans l'extension
FileName = Mid(Path, Len(FilePath) + 1, Len(Path) - (7 + Len(FilePath)))
' on affiche la variable dans la fenêtre Exécution
Debug.Print "FileName=" & FileName

' on affiche la variable dans la fenêtre Exécution
Debug.Print "Path=" & Path
lgFichier = InStrRev(Path, "\", -1, vbTextCompare) - 1
If lgFichier > 0 Then
    Path = Left(Path, lgFichier)
End If

' On récupère le chemin du bureau Windows
PathDesktop = Environ("USERPROFILE") & "\Desktop"
' on affiche la variable dans la fenêtre Exécution
Debug.Print "PathDesktop=" & PathDesktop

' On définit les paramètres d'export en PDF
Set swModelDocExt = swModel.Extension
Set swExportPDFData = swApp.GetExportFileData(1)
swExportPDFData.ViewPdfAfterSaving = False

' On définit le chemin et le nom du premier fichier pdf à créer
'nFileName = Left(Path, Len(Path) - 6) & "PDF" 'Retrait de l'extension SW en gardant le point et ajout PDF
nFileName = FilePath & FileName & ".pdf"

' on affiche la variable dans la fenêtre Exécution
Debug.Print "nFileName=" & nFileName
' On sauvegarde le premier fichier pdf
boolstatus = swModelDocExt.SaveAs(nFileName, 0, 0, swExportPDFData, lErrors, lWarnings)

' On définit le chemin et le nom du deuxième fichier pdf à créer
'nFileName2 = PathDesktop & Left(nFileName2, Len(nFileName2) - 6) & "PDF"
nFileName2 = PathDesktop & "\" & FileName & ".pdf"
' on affiche la variable dans la fenêtre Exécution
Debug.Print "nFileName2=" & nFileName2
' On sauvegarde le deuxième fichier pdf
boolstatus = swModelDocExt.SaveAs(nFileName2, 0, 0, swExportPDFData, lErrors, lWarnings)

End Sub

 

 

2 polubienia

@sbadenis

Makro też jest idealne, bardzo dziękuję!

Witam, czy mógłbyś przesłać mi to makro?

Kod makra jest dostępny w poście, który rozwiązał temat.
Wystarczy utworzyć nowe makro i wkleić do niego kod.

W razie potrzeby utwórz ponownie temat (z powiązanym tematem), zamiast wykopywać stary temat.

3 polubienia