Solidworks Macro: tekenen naar PDF en DXF

Hallo

Ik wil een macro maken voor Solidworks die tekenbladen omzet in PDF's of DXF's.
PDF-bestanden krijgen de naam "bestandsnaam+bladnaam"
DXF-bestanden krijgen op dezelfde manier een naam.

De macro moet onderscheid maken tussen de bladen die als PDF of DXF moeten worden opgeslagen, afhankelijk van de aan- of afwezigheid van het woord DXF in de naam van het blad.

Hieronder ziet u de macro die is gemaakt. Helaas krijg ik de foutmelding "compilatiefout: door de gebruiker gedefinieerd type niet gedefinieerd".
Met "swExportDXFData As SldWorks.ExportDxfData" gemarkeerd in blauw.
Ik denk dat ik begrijp dat er een stukje gegevens ontbreekt in de referenties, maar ik ben verdwaald.

Ik ben op SolidWorks 2022.

Kan iemand mij helpen?

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
Tenzij ik me vergis, bestaat SldWorks.ExportDxfData niet, vandaar de compilatiefout.
Kijk naar dit onderwerp dat identiek is

2 likes

Bedankt voor je antwoord, maar ik kan het niet.
Ik heb een andere benadering van de zaak geprobeerd en ik heb een ander probleem.

Ik wil "alleen" de vellen van een tekening opslaan in .pdf of .dxf, afhankelijk van of het woord "DXF" aanwezig is in de tabbladnaam (naam van het blad), maar het lijkt me te ingewikkeld.

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

Met deze code heb ik een nieuwe fout:
rij: Voor elke swSheet In swDraw.GetSheets()

Foutcode: 438
Eigenschap of methode die niet wordt ondersteund door dit object

Ik probeer een aantal macro-voorbeelden te krijgen om me te helpen, maar ik ga rond in cirkels ...

Hallo

Er zijn veel instructies die niet in uw code voorkomen en die moeten worden geactiveerd voordat u ze kunt gebruiken. Ik heb nu geen tijd om ernaar te kijken, misschien op maandag als er niemand anders langskomt over het onderwerp.

1 like

Hallo @stev7833 ,

De compilatiefout wordt veroorzaakt door het feit dat GetSheets geen methode van een tekendocument is. De lijst met bladen moet worden doorkruist met behulp van hun namen door GetSheetNames.

Bovendien volgen de spreadsheet-voor-vel exports van een tekening in pdf en dxf niet dezelfde logica: gegevensstructuur voor de eerste (ExportPdfData), instelling van exportopties voor de tweede (swDxfMultiSheetOption, swDxfActiveSheetOnly).

In principe zou de macro-join het werk moeten doen...

Vriendelijke groeten.
ExportMEPtoPdfDxf.swp (59.5 KB)

1 like

Bedankt voor de info en de macro,
Het werkt heel goed!