Bearbeiten von PDF/DWG-STEP Makro-Code

Ich habe immer mit der gleichen Datei getestet. das Zeichnen einer Mütze.
Die Zeichnung befindet sich in einem anderen Ordner als die Teile, aber die Dateien haben denselben Namen.

Ich habe mir den Code bereits Schritt für Schritt angesehen, und da ich nicht allzu viel darüber weiß, weiß ich nicht, wie ich die Probleme richtig identifizieren soll.

Um das Makro zu starten, habe ich eine Schaltfläche erstellt und es auch mit der Play-Taste versucht.

Ja, für die Unterordner habe ich im Moment nichts anderes getan, als die 3 zu definierenden Variablen eingefügt zu haben.
Denn ich versuche, den Code jedes Mal zum Laufen zu bringen. Ich habe den Basiscode genommen, ohne Änderungen vorzunehmen, außer die Revision im Dateinamen zu entfernen.

Es hat einmal funktioniert, ich habe die generierten Dateien gelöscht und neu gestartet und dort hatte ich den folgenden Fehler
image

Und nein, ich habe den Code der 4. Antwort noch nicht getestet @Cyril.f

Ich habe gerade meinen Fehler gefunden, meine Schaltfläche zum Ausführen des Makros war falsch konfiguriert, dann funktioniert es gut

Gute Nachricht.
Alles, was bleibt, ist, die " Beste Antwort " zu validieren, um diese Diskussion zu schließen.
image

Und bis bald für neue Makros...
In der Zwischenzeit rate ich Ihnen, verschiedene Websites zu konsultieren (nicht immer auf Französisch -Visual Basic- verpflichtet), aber oft didaktisch, um in die Programmierung einzusteigen:


Herzliche Grüße.

2 „Gefällt mir“

Und auch, um die Makros aus dem Editor zu starten, um das richtige zu starten! :crazy_face:
Und sobald das funktioniert, können Sie eine Schaltfläche erstellen.

Ja, auf der anderen Seite habe ich noch nicht den Teil des Codes, der es mir ermöglicht, die Dateien in den Unterordnern zu speichern

Wenn Sie den Code der 5. Nachricht nehmen, werden die Dateien in die PDF-Verzeichnisse Dwg und Step gelegt.
Ich denke, Sie mischen Pinsel mit den verschiedenen Versionen des Makros.
Hier das oben bereits erwähnte Beispiel:
image

1 „Gefällt mir“

In der Tat, so viel für mich, ich habe es nicht gut angeschaut, sorry für all diesen Austausch!

Ich habe nur eine kurze Anmerkung, der STEP-Ordner wird im Zeichnungsordner erstellt, und ich möchte, dass er im Teileordner erstellt wird. Hier ist die Baumstruktur meiner Dateien:
1-Montage
2-teilig / STUFE
3-Zeichnung / PDF - /DWG

Das Hinzufügen von so etwas sollte besser sein (nicht getestet):

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

Der Speicherort, an dem der Code hinzugefügt werden soll:
image

Ich erhalte eine Fehlermeldung mit dem Meldungspfad nicht gefunden, wobei die Zeile "MkDir sFilePath & "Step"" hervorgehoben ist

Wenn der Teileordner nicht vorhanden ist, kann mkdir keine Ordner und Unterordner in einem Befehl erstellen.

1 „Gefällt mir“

Sicherlich ein \ zu viel oder weniger, was ist der Wert von sFilePath kurz davor?
Falls erforderlich, um es zu überprüfen
debug.print sFilepath hinzugefügt, direkt unter den vorherigen 3 Zeilen und schauen Sie sich den Wert im Fenster "Ausführung" über die Bearbeitung der Makroanzeige an

1 „Gefällt mir“

Ich habe das Gefühl, dass es nicht zurückgeht, weil es den Teileordner zu den Zeichnungsordnern hinzufügt

Existiert die Dokumentendatei immer und ist sie immer auf die gleiche Weise kodifiziert?
Ist es zum Beispiel im Grunde genommen diese Art von Baum?
C:\xxxx\Teile
C:\xxxx\Zeichnungen

Ja, der Teileordner mit dem gleichen Namen "2 - Stücke" existiert noch

Grundsätzlich nicht optimiert und keine Prüfung, ob die Dateien bereits vorhanden sind:

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

Damit es funktioniert, müssen Sie in den Referenzen " Microsoft Scripting Runtime " auswählen:
image

1 „Gefällt mir“

Ich habe den Code von @sbadenis genommen, sodass ich die 3 Pfadvariablen nicht mehr habe

Es handelt sich um denselben Code, der nur für den Ordnererstellungsteil geändert wurde.

1 „Gefällt mir“

In diesem Teil des Codes muss ich ändern, was das Makro funktioniert.

'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\"

Großartig Vielen Dank für alles