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
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...
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.
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...