Solidworks Makro: Zeichnen in PDF und DXF

Hallo

Ich möchte ein Makro für Solidworks erstellen, das Zeichnungsblätter in PDFs oder DXFs umwandelt.
PDF-Dateien erhalten den Namen "Dateiname+Blattname"
DXF-Dateien werden auf die gleiche Weise benannt.

Das Makro muss zwischen den Blättern unterscheiden, die als PDF oder DXF gespeichert werden sollen, je nachdem, ob das Wort DXF im Namen des Blatts vorhanden ist oder nicht.

Unten sehen Sie das erstellte Makro. Leider bekomme ich die Fehlermeldung "Kompilierungsfehler: Benutzerdefinierter Typ nicht definiert".
"swExportDXFData As SldWorks.ExportDxfData" ist blau hervorgehoben.
Ich glaube zu verstehen, dass in den Referenzen ein Stück Daten fehlen, aber ich habe mich verlaufen.

Ich bin auf SolidWorks 2022.

Kann mir jemand helfen?

Option Explicit

Sub ExportPDFandDXF()
    
    Dim swApp As SldWorks.SldWorks
    Dim swModel As SldWorks.ModelDoc2
    Dim swDraw As SldWorks.DrawingDoc
    Dim swSheet As SldWorks.Sheet
    Dim swExportData As SldWorks.ExportPdfData
    Dim swExportDXFData As SldWorks.ExportDxfData
    Dim sheetName As String
    Dim fileName As String
    Dim filePath As String
    Dim numSheets As Integer
    Dim i As Integer
    
    Set swApp = Application.SldWorks
    Set swModel = swApp.ActiveDoc
    
    If swModel Is Nothing Then
        MsgBox "Aucun document ouvert dans SolidWorks."
        Exit Sub
    End If
    
    If Not swModel.GetType = swDocumentTypes_e.swDocDRAWING Then
        MsgBox "Ce n'est pas un document de mise en plan."
        Exit Sub
    End If
    
    Set swDraw = swModel
    
    numSheets = swDraw.GetSheetCount
    
    fileName = Left(swModel.GetPathName, InStrRev(swModel.GetPathName, ".") - 1)
    filePath = Left(swModel.GetPathName, InStrRev(swModel.GetPathName, "\"))

    For i = 1 To numSheets
        
        Set swSheet = swDraw.Sheet(i)
        
        sheetName = swSheet.GetName
        
        If InStr(sheetName, "DXF") > 0 Then
            
            Set swExportDXFData = swApp.GetExportFileData(1)
            
            swExportDXFData.fileName = fileName & sheetName & ".dxf"
            swExportDXFData.SetSheets swSheet.GetName
            
            swModel.Extension.ExportToDWGDXF swExportDXFData
            
        Else
            
            Set swExportData = swApp.GetExportFileData(swExportPdfData)
            
            swExportData.fileName = fileName & sheetName & ".pdf"
            swExportData.SetSheets swSheet.GetName
            
            swModel.Extension.SaveAs swExportData
            
        End If
        
    Next i
    
    MsgBox "Exportation terminée."
    
End Sub


Hallo
Wenn ich mich nicht irre, existiert SldWorks.ExportDxfData nicht, daher der Kompilierungsfehler.
Schauen Sie sich dieses Thema an, das identisch ist

2 „Gefällt mir“

Vielen Dank für Ihre Antwort, aber ich kann es nicht.
Ich habe einen anderen Ansatz für den Fall ausprobiert und habe ein anderes Problem.

Ich möchte "nur" die Blätter einer Zeichnung in .pdf oder .dxf speichern, je nachdem ob das Wort "DXF" im Tab-Namen (Name des Blattes) vorhanden ist, aber es scheint mir zu kompliziert zu sein.

Dim swApp As Object
Dim swModel As SldWorks.ModelDoc2
Dim swDraw As SldWorks.DrawingDoc
Dim swSheet As SldWorks.Sheet
Dim nomFeuille As String
Dim nomFichier As String
Dim dossier As String

Sub EnregistrerFeuilles()

    Set swApp = Application.SldWorks
    
    ' Vérifier si un document est ouvert
    Set swModel = swApp.ActiveDoc
    If swModel Is Nothing Then
        MsgBox "Ouvrir un document SolidWorks", vbExclamation, "Erreur"
        Exit Sub
    End If
    
    ' Vérifier si le document est une mise en plan
    If Not swModel.GetType = swDocDRAWING Then
        MsgBox "Le document actif n'est pas une mise en plan", vbExclamation, "Erreur"
        Exit Sub
    End If
    
    ' Récupérer le dossier et le nom du fichier
    dossier = Left(swModel.GetPathName, InStrRev(swModel.GetPathName, "\"))
    
    If InStrRev(swModel.GetTitle, ".") > 0 Then
        nomFichier = Mid(swModel.GetTitle, 1, InStrRev(swModel.GetTitle, ".") - 1)
    Else
        nomFichier = swModel.GetTitle
    End If
    
    ' Enregistrer chaque feuille en tant que fichier séparé
    Set swDraw = swModel
    If swDraw Is Nothing Then
        MsgBox "Le document actif n'est pas une mise en plan", vbExclamation, "Erreur"
        Exit Sub
    End If
    
    For Each swSheet In swDraw.Sheets
        nomFeuille = swSheet.GetName
        
        If InStr(1, nomFeuille, "DXF", vbTextCompare) > 0 Then
            swSheet.SaveAs dossier & nomFichier & " " & nomFeuille & ".dxf"
        Else
            swSheet.SaveAs dossier & nomFichier & " " & nomFeuille & ".pdf"
        End If
    Next
    
    MsgBox "Les feuilles ont été enregistrées", vbInformation, "Terminé"
    
End Sub

Mit diesem Code habe ich einen neuen Fehler:
row: Für jedes swSheet In swDraw.GetSheets()

Fehlercode: 438
Eigenschaft oder Methode, die von diesem Objekt nicht unterstützt wird

Ich versuche, einige Makrobeispiele zu bekommen, die mir helfen, aber ich drehe mich im Kreis...

Hallo

Es gibt viele Anweisungen, die in Ihrem Code nicht vorhanden sind und aktiviert werden müssen, bevor Sie sie verwenden können. Ich habe jetzt keine Zeit, es mir anzusehen, vielleicht am Montag, wenn niemand anderes zu dem Thema vorbeikommt.

1 „Gefällt mir“

Hallo @stev7833 ,

Der Kompilierungsfehler wird durch die Tatsache verursacht, dass GetSheets keine Methode eines Zeichnungsdokuments ist. Die Liste der Blätter sollte mit ihren Namen von GetSheetNames durchlaufen werden.

Darüber hinaus folgen die Blatt-für-Blatt-Exporte einer Zeichnung in pdf und dxf nicht der gleichen Logik: Datenstruktur für die erste (ExportPdfData), Einstellung der Exportoptionen für die zweite (swDxfMultiSheetOption, swDxfActiveSheetOnly).

Prinzipiell sollte der Makro-Join die Aufgabe erfüllen...

Herzliche Grüße.
ExportMEPtoPdfDxf.swp (59.5 KB)

1 „Gefällt mir“

Danke für die Info und das Makro,
Es funktioniert sehr gut!