Edycja kodu makra PDF/DWG-STEP

Zawsze testowałem na tym samym pliku. rysunek czapki.
Rysunek znajduje się w innym folderze niż części, ale pliki mają tę samą nazwę.

Przyjrzałem się już kodowi, robiąc to krok po kroku, a ponieważ nie znam się na nim zbyt wiele, nie wiem, jak poprawnie zidentyfikować problemy.

Aby uruchomić makro, zrobiłem przycisk i próbowałem również z odtwarzania.

Tak dla podfolderów, na razie nic nie zrobiłem, tylko wkleiłem 3 zmienne do zdefiniowania.
Ponieważ staram się, aby kod działał za każdym razem. Wziąłem podstawowy kod bez wprowadzania żadnych zmian, z wyjątkiem usunięcia poprawki w nazwie pliku.

Raz zadziałało, usunąłem wygenerowane pliki i uruchomiłem od nowa i tam pojawił się błąd poniżej
image

I nie, nie testowałem jeszcze kodu 4. odpowiedzi @Cyril_f

Właśnie znalazłem błąd, mój przycisk do uruchamiania makra był źle skonfigurowany, działa dobrze

Dobra wiadomość.
Wszystko, co pozostaje, to zatwierdzić " Najlepszą odpowiedź ", aby zamknąć tę dyskusję.
image

I do zobaczenia wkrótce, aby zobaczyć nowe makra...
W międzyczasie radzę zajrzeć na różne strony (nie zawsze po francusku -Visual Basic- zobowiązuje), ale często dydaktyczne, aby rozpocząć naukę programowania:


Pozdrowienia.

2 polubienia

A także uruchomić makra z edytora, aby uruchomić właściwy! :crazy_face:
A kiedy to zadziała, możesz utworzyć przycisk.

Tak, z drugiej strony nie mam jeszcze części kodu, która pozwala mi przechowywać pliki w podfolderach

Jeśli weźmiesz kod 5. wiadomości, umieści on pliki w katalogach pdf Dwg i Step.
Myślę, że mieszasz pędzle z różnymi wersjami makra.
Oto przykład wspomniany już powyżej:
image

1 polubienie

Rzeczywiście, tak samo jak dla mnie, nie patrzyłem na to dobrze, przepraszam za te wszystkie wymiany zdań!

Mam tylko krótką notatkę, folder STEP jest tworzony w folderze Rysunek i chciałbym, aby został utworzony w folderze części. Oto struktura drzewa moich plików:
1-Montaż
2 sztuki / KROK
3-Rysunek / PDF - /DWG

Dodanie czegoś takiego powinno być lepsze (nie testowane):

'On revient un dossier en arrière puis on ajoute le dossier Pièces
sFilePath = Left(sModelFullPath, InStrRev(sModelFullPath, "\"))
sFilePath = sFilePath & "Pièces\"

Lokalizacja, w której należy dodać kod:
image

Otrzymuję komunikat o błędzie z informacją, że nie znaleziono ścieżki do wiadomości z podświetlonym wierszem "MkDir sFilePath & "Step""

Jeśli folder części nie istnieje, mkdir nie może utworzyć folderów i podfolderów w jednym poleceniu.

1 polubienie

Na pewno o jeden \ za dużo lub mniej, jaka jest wartość sFilePath tuż przed?
W razie potrzeby należy to zweryfikować
dodano debug.print sFilepath, tuż pod poprzednimi 3 liniami i spójrz na wartość w oknie "Wykonanie" za pomocą edycji wyświetlania makr

1 polubienie

Czuję, że to nie wróci, ponieważ dodaje folder części do folderów rysunków

Czy plik z dokumentami zawsze istnieje i czy zawsze jest skodyfikowany w ten sam sposób?
Zasadniczo, na przykład, czy jest to ten rodzaj drzewa?
C:\xxxx\Części
C:\xxxx\Rysunki

Tak, folder części nadal istnieje o tej samej nazwie "2 - Sztuki"

Zasadniczo nie zoptymalizowane i nie ma sprawdzania, czy pliki już istnieją:

Option Explicit

 
Dim swApp                       As SldWorks.SldWorks
Dim swModel                     As SldWorks.ModelDoc2
Dim swDraw                      As SldWorks.DrawingDoc
Dim swView                      As SldWorks.View
Dim swConfig                    As SldWorks.Configuration

Dim vSheetNameArr               As Variant
Dim vSheetName                  As Variant

Dim I                           As Long
Dim nDocType                    As Long
Dim op                          As Long
Dim suppr                       As Long
Dim lErrors                     As Long
Dim lWarnings                   As Long

Dim boolstatus                  As Boolean
Dim bRet                        As Boolean
Dim FileConnu                   As Boolean

Dim nbConnu                     As Integer

Dim sModelName                  As String
Dim sPathName                   As String
Dim TabConnu(10000)             As String
Dim sConfigName                 As String
Dim sModelFullPath              As String
Dim sFilePath                   As String
Dim sFilePathStep               As String
Dim sFileName                   As String
Dim sFileNameWithoutExtension   As String
Dim fs                          As Scripting.FileSystemObject

Const dxfSubFolder = "dwg\"
Const pdfSubFolder = "pdf\"
Const stepSubFolder = "2 - Pieces\step\"

Sub main()

Set swApp = Application.SldWorks
boolstatus = swApp.SetUserPreferenceIntegerValue(swStepAP, 214) 'Force la version AP214
boolstatus = swApp.SetUserPreferenceIntegerValue(swStepExportPreference, swAcisOutputGeometryPreference_e.swAcisOutputAsSolidAndSurface) 'Force l'export en format Solid/Surface Geometry

Set swModel = swApp.ActiveDoc

' PathName of current model document
sModelFullPath = swModel.GetPathName

' get path name without filename
sFilePath = Left(sModelFullPath, InStrRev(sModelFullPath, "\"))
sFilePathStep = Left(sFilePath, InStrRev(sFilePath, "\", Len(sFilePath) - 1))
Debug.Print sFilePathStep
' get filename and extension
sFileName = Right(sModelFullPath, Len(sModelFullPath) - InStrRev(sModelFullPath, "\"))

' get filename without extension
sFileNameWithoutExtension = Left(sFileName, InStrRev(sFileName, ".") - 1)



Debug.Print sFilePath & pdfSubFolder & sFileNameWithoutExtension & ".pdf"
'On vérifie si le dossier de sauvegarde existe sinon création de ce dossier
CreateRep (sFilePath & pdfSubFolder)
swModel.Extension.SaveAs sFilePath & pdfSubFolder & sFileNameWithoutExtension & ".pdf", swSaveAsCurrentVersion, swSaveAsOptions_Silent, Nothing, lErrors, lWarnings

'On vérifie si le dossier de sauvegarde existe sinon création de ce dossier
CreateRep (sFilePath & dxfSubFolder)
swModel.Extension.SaveAs sFilePath & dxfSubFolder & sFileNameWithoutExtension & ".dwg", swSaveAsCurrentVersion, swSaveAsOptions_Silent, Nothing, lErrors, lWarnings

'On vérifie si le dossier de sauvegarde existe sinon création de ce dossier
CreateRep (sFilePathStep & stepSubFolder)

Call ExportStep

End Sub
Function CreateRep(sRep As String)
Set fs = New Scripting.FileSystemObject
If Not fs.FolderExists(sRep) Then
    fs.CreateFolder (sRep)
End If
Set fs = Nothing
End Function
Sub ExportStep()
Set swDraw = swModel
vSheetName = swDraw.GetSheetNames
vSheetNameArr = swDraw.GetSheetNames

For Each vSheetName In vSheetNameArr
        
    bRet = swDraw.ActivateSheet(vSheetName): Debug.Assert bRet
    Set swView = swDraw.GetFirstView 'Sélectionne le fond de plan
    Set swView = swView.GetNextView  'Passe à la vue suivante pour exclure le fond de plan
                
    While Not swView Is Nothing
           
        ' Determine if this is a view of a part or assembly

        sModelName = swView.GetReferencedModelName

        sModelName = LCase(sModelName)
                        
        sConfigName = swView.ReferencedConfiguration
        
        FileConnu = False
        
        If InStr(sModelName, "sldprt") > 0 Then
            nDocType = swDocPART
        ElseIf InStr(sModelName, "slasm") > 0 Then
            nDocType = swDocASSEMBLY
        Else
            nDocType = swDocNONE
            Exit Sub
        End If
                       
        If nDocType = 1 Then
            For I = 1 To nbConnu
                If UCase(sModelName) & " - " & UCase(sConfigName) = TabConnu(I) Then
                    FileConnu = True
                End If
            Next
            If Not FileConnu Then
                nbConnu = nbConnu + 1
                TabConnu(nbConnu) = UCase(sModelName) & " - " & UCase(sConfigName)
                Call Export
            End If
        End If
        
        Set swView = swView.GetNextView
    Wend

Next vSheetName



End Sub
Sub Export()
Set swModel = swApp.ActivateDoc3(sModelName, True, swOpenDocOptions_Silent, lErrors)
Set swModel = swApp.ActiveDoc
boolstatus = swModel.ShowConfiguration2(sConfigName)
Set swConfig = swModel.GetActiveConfiguration
sPathName = sFilePathStep & stepSubFolder & sFileNameWithoutExtension & ".step"
If Dir(sPathName, vbHidden) <> "" Then              'Test l'existence du fichier
    suppr = MsgBox("Le fichier " & sPathName & " existe déjà, voulez vous le supprimer?", vbYesNo) 'Message utilisateur confirmation de suppression oui/non
        If suppr = vbYes Then                       'Réponse Oui
            Kill (sPathName) 'Suppression du fichier existant
            swModel.SaveAs2 sPathName, 0, True, False  'Enregistrement du fichier
            op = MsgBox("Le fichier a été enregistré sous " & sPathName & vbNewLine)
            Else                                    'Réponse NON
        MsgBox ("Fichier conservé")                 'Message utilisateur
        End If
        Else
        swModel.SaveAs2 sPathName, 0, True, False      'Enregistrement du fichier
        op = MsgBox("Le fichier a été enregistré sous " & sPathName) 'Message utilisateur
    End If
swApp.CloseDoc (sModelName)
Set swModel = swApp.ActiveDoc
End Sub

Aby to zadziałało, musisz wybrać " Microsoft Scripting Runtime " w odnośnikach:
image

1 polubienie

Wziąłem kod z @sbadenis , więc nie mam już 3 zmiennych ścieżki

Jest to ten sam kod, który został zmodyfikowany tylko dla części tworzenia folderu.

1 polubienie

Na tej części kodu muszę zmienić co, aby makro działało?

'On revient un dossier en arrière puis on ajoute le dossier Pièces
sFilePath = Left(sModelFullPath, InStrRev(sModelFullPath, "\"))
sFilePath = sFilePath & "2 - Pièces\"
'On vérifie si le dossier de sauvegarde existe sinon création de ce dossier STEP
If Dir(sFilePath & "Step\", vbDirectory) = vbNullString Then
    MkDir sFilePath & "Step\"
End If
sFilePath = Left(sFilePath, InStrRev(sFilePath, "\", Len(sFilePath) - 1))
sFilePath = sFilePAth & "2 - Pièces\"

Wielkie Dzięki za wszystko