Differenzierter Export der Zeichnungsregisterkarten in pdf und dxf durch ein Makro

Hallo

Ich verwende das angehängte Makro erfolgreich, um alle Registerkarten in einer PDF-Zeichnung als separate Dateien zu exportieren.

Ich arbeite an mehrteiligen Schweißbaugruppen, die zum Teil aus Blech bestehen.

Jede Registerkarte ist mit der Artikelnummer aus der Liste der geschweißten Teile benannt.

Beim Speichern fügt das Makro den Namen der Teiledatei als Präfix hinzu, was mir perfekt passt.

Auf der anderen Seite werden Blechteile, die für das Laserschneiden bestimmt sind, auf zusätzlichen Registerkarten mit dem Namen "Schneiden" + Artikel-Nr. dargestellt.

Was ich möchte, ist, dass die Tabs, die mit dem Wort "Cutting" beginnen, nicht in pdf, sondern in dxf mit der Artikelnummer ohne das Präfix als Dateiname gespeichert werden.

Da ich kein Experte im Programmieren bin, kann mir ein Mitglied des Forums helfen?

Mit Dank

 

 


pdf_page_par_page.swp

Es ist einfacher, den Code direkt anzuzeigen, als das Makro anzufügen:

Const INCLUDE_DRAWING_NAME As Boolean = True

Dim swApp As SldWorks.SldWorks

Sub main()

    Set swApp = Application.SldWorks
    
try_:
    
    On Error GoTo catch_
    
    Dim swDraw As SldWorks.DrawingDoc
    
    Set swDraw = swApp.ActiveDoc
    
    Dim swModel As SldWorks.ModelDoc2
    Set swModel = swDraw
        
    If swModel.GetPathName() = "" Then
        Err.Raise vbError, "", "Please save drawing"
    End If
        
    Dim vSheetNames As Variant
    
    Dim i As Integer
    
    Dim swSelMgr As SldWorks.SelectionMgr
    
    Set swSelMgr = swModel.SelectionManager
    
    Dim selSheetNames() As String
    
    For i = 1 To swSelMgr.GetSelectedObjectCount2(-1)
        
        If swSelMgr.GetSelectedObjectType3(i, -1) = swSelectType_e.swSelSHEETS Then
            
            If (Not selSheetNames) = -1 Then
                ReDim selSheetNames(0)
            Else
                ReDim Preserve selSheetNames(UBound(selSheetNames) + 1)
            End If
            Dim swSheet As SldWorks.Sheet
            Set swSheet = swSelMgr.GetSelectedObject6(i, -1)
            
            selSheetNames(UBound(selSheetNames)) = swSheet.GetName()
            
        End If
    Next
    
    If (Not selSheetNames) = -1 Then
        vSheetNames = swDraw.GetSheetNames
    Else
        vSheetNames = selSheetNames
    End If
    
    For i = 0 To UBound(vSheetNames)
        
        Dim sheetName As String
        sheetName = vSheetNames(i)
        
        Dim swExpPdfData As SldWorks.ExportPdfData
        Set swExpPdfData = swApp.GetExportFileData(swExportDataFileType_e.swExportPdfData)
        
        Dim errs As Long
        Dim warns As Long
        
        Dim expSheets(0) As String
        expSheets(0) = sheetName
        
        swExpPdfData.ExportAs3D = False
        swExpPdfData.ViewPdfAfterSaving = False
        swExpPdfData.SetSheets swExportDataSheetsToExport_e.swExportData_ExportSpecifiedSheets, expSheets
        
        Dim drawName As String
        drawName = swModel.GetPathName()
        drawName = Mid(drawName, InStrRev(drawName, "\") + 1, Len(drawName) - InStrRev(drawName, "\") - Len(".slddrw"))
        
        Dim outFile As String
        outFile = swModel.GetPathName()
        outFile = Left(outFile, InStrRev(outFile, "\"))
        Debug.Print outFile
        Debug.Print sheetName
        outFile = outFile & IIf(INCLUDE_DRAWING_NAME, drawName & "_", "") & sheetName & ".pdf"
        If False = swModel.Extension.SaveAs(outFile, swSaveAsVersion_e.swSaveAsCurrentVersion, swSaveAsOptions_e.swSaveAsOptions_Silent, swExpPdfData, errs, warns) Then
            Err.Raise vbError, "", "Failed to export PDF to " & outFile
        End If
        
    Next
    
    
    GoTo finally_
    
catch_:
    
    swApp.SendMsgToUser2 Err.Description, swMessageBoxIcon_e.swMbStop, swMessageBoxBtn_e.swMbOk
    
finally_:
    
End Sub

Um den Code zu verstehen, müssen Sie nur debug.files hinzufügen und sich das Ausführungsfenster ansehen

Der Teil, der Sie betrifft:

outFile = Left(outFile, InStrRev(outFile, "\")) ' ruft den Pfad zur Zeichnung ab

Sichtbar mit debug.file "outFile" & outFile' zeigt c:\temp\ an

Dann:

outFile = outFile & IIf(INCLUDE_DRAWING_NAME, drawName & "_", "") & sheetName & ".pdf"

Diese Zeile definiert den Namen Ihrer PDF-Datei drawName ruft den Namen Ihrer Zeichnungsdatei und sheetName den Namen des Plans ab.

Ensuite         If False = swModel.Extension.SaveAs(outFile, swSaveAsVersion_e.swSaveAsCurrentVersion, swSaveAsOptions_e.swSaveAsOptions_Silent, swExpPdfData, irrt, warnt) Dann
            Err.Raise vbError, "", "Fehler beim Exportieren von PDF in " & outFile
        Ende, wenn

Exportieren Sie Ihre Datei als PDF oder zeigen Sie eine Fehlermeldung an.

Jetzt müssen Sie eine Bedingung hinzufügen: Wenn Ihr sheetName-Blatt mit dem Ausschneiden beginnt, erhalten Sie den Rest des Blattnamens und exportieren in dwg statt  in pdf.

Der Hinweis befasst sich mit der vba If-Funktion und auch der Split-Funktion

2 „Gefällt mir“

Danke Sbadenis für diese Antwort.

Ich habe mir die if- und split-Funktionen angesehen, weiß aber nicht, wie ich sie in den Code integrieren kann, um das Ergebnis zu erhalten, das ich suche...

Tut mir leid, dass ich darauf zurückkomme, aber ich komme nicht dazu, das DXF zu erstellen

Wenn Sie mir helfen können, danke ich Ihnen im Voraus

Einen vorgefertigten Code zu haben ist gut, aber ihn zu verstehen ist besser!

 

Dieser Code sollte funktionsfähig sein, auch wenn ich es in Eile gemacht habe.

Ich habe die if (Bedingung) hinzugefügt, um zu testen, ob der Name des Blattes mit cut beginnt, wenn dies der Fall ist, exportiere ich die Registerkarte mit dem Namen des Artikels, der mit der mid-Funktion (anstelle von split) abgerufen wird.

Mit ein paar Versuchen und Internetrecherche hätten Sie es meiner Meinung nach tun können, indem Sie Ihren Code im Laufe der Zeit anzeigen und Hilfe erhalten.

Const INCLUDE_DRAWING_NAME As Boolean = True

Dim swApp As SldWorks.SldWorks

Sub main()

    Set swApp = Application.SldWorks
    
try_:
    
    On Error GoTo catch_
    
    Dim swDraw As SldWorks.DrawingDoc
    
    Set swDraw = swApp.ActiveDoc
    
    Dim swModel As SldWorks.ModelDoc2
    Set swModel = swDraw
        
    If swModel.GetPathName() = "" Then
        Err.Raise vbError, "", "Please save drawing"
    End If
        
    Dim vSheetNames As Variant
    
    Dim i As Integer
    
    Dim swSelMgr As SldWorks.SelectionMgr
    
    Set swSelMgr = swModel.SelectionManager
    
    Dim selSheetNames() As String
    
    For i = 1 To swSelMgr.GetSelectedObjectCount2(-1)
        
        If swSelMgr.GetSelectedObjectType3(i, -1) = swSelectType_e.swSelSHEETS Then
            
            If (Not selSheetNames) = -1 Then
                ReDim selSheetNames(0)
            Else
                ReDim Preserve selSheetNames(UBound(selSheetNames) + 1)
            End If
            Dim swSheet As SldWorks.Sheet
            Set swSheet = swSelMgr.GetSelectedObject6(i, -1)
            
            selSheetNames(UBound(selSheetNames)) = swSheet.GetName()
            
        End If
    Next
    
    If (Not selSheetNames) = -1 Then
        vSheetNames = swDraw.GetSheetNames
    Else
        vSheetNames = selSheetNames
    End If
    
    For i = 0 To UBound(vSheetNames)
        
        Dim sheetName As String
        sheetName = vSheetNames(i)
        
        Dim swExpPdfData As SldWorks.ExportPdfData
        Set swExpPdfData = swApp.GetExportFileData(swExportDataFileType_e.swExportPdfData)
        
        Dim errs As Long
        Dim warns As Long
        
        Dim expSheets(0) As String
        expSheets(0) = sheetName
        
        swExpPdfData.ExportAs3D = False
        swExpPdfData.ViewPdfAfterSaving = False
        swExpPdfData.SetSheets swExportDataSheetsToExport_e.swExportData_ExportSpecifiedSheets, expSheets
        
        Dim drawName As String
        drawName = swModel.GetPathName()
        drawName = Mid(drawName, InStrRev(drawName, "\") + 1, Len(drawName) - InStrRev(drawName, "\") - Len(".slddrw"))
        
        Dim outFile As String
        outFile = swModel.GetPathName()
        outFile = Left(outFile, InStrRev(outFile, "\"))
        Debug.Print outFile
        Debug.Print sheetName
        
        If sheetName Like "Découpe*" Then 'Si Le nom de la feuille commence par Découpe, suivit de aucun ou plusieurs caractères
                Debug.Print "Fichier dxf à traiter"
                'Export en dxf à ajouter ici
                Debug.Print Mid(sheetName, 8)
                outFile = outFile & Mid(sheetName, 8) & ".dxf"
                Debug.Print "outfile=" & outFile
                If False = swModel.Extension.SaveAs(outFile, swSaveAsVersion_e.swSaveAsCurrentVersion, swSaveAsOptions_e.swSaveAsOptions_Silent, swExpPdfData, errs, warns) Then
                    Err.Raise vbError, "", "Failed to export dxf to " & outFile
                End If
        
        Else
            Debug.Print "Fichier pdf à traiter"
            outFile = outFile & IIf(INCLUDE_DRAWING_NAME, drawName & "_", "") & sheetName & ".pdf"
            If False = swModel.Extension.SaveAs(outFile, swSaveAsVersion_e.swSaveAsCurrentVersion, swSaveAsOptions_e.swSaveAsOptions_Silent, swExpPdfData, errs, warns) Then
                Err.Raise vbError, "", "Failed to export PDF to " & outFile
            End If
        
        End If
        

 

Hallo sbadenis

Tut mir leid, darauf zurückzukommen, ich habe im Netz gesucht, ich habe versucht, selbst m^meme zu finden, aber nichts hilft:

Der PDF-Exportteil funktioniert hervorragend im Makro Ihres vorherigen Beitrags

Das dxf-Exportteil exportiert die Dateien mit dem richtigen Namen, aber es ist das erste Blatt der Zeichnungsdatei, das jedes Mal exportiert wird, und nicht die Schnittseite

Können Sie mir helfen, die Lösung zu finden?

Vielen Dank im Voraus

 

Können Sie eine Beispieldatei (Teil + MEP) anhängen, um es zu verstehen?

Befindet sich Ihre Schnittseite noch auf der 2. Seite oder ist sie zufällig?

Hallo Sbadenis und vielen Dank für Ihre Nachricht

Im Anhang finden Sie eine Teiledatei und deren Zeichnung

Alle meine Detailpläne meiner Schweißbaugruppen werden nach dem gleichen Prinzip erstellt

Die Anzahl der Registerkarten ist zufällig, ob geschnitten oder andere: Sie hängt von der Komplexität des Ganzen ab

Ich hatte mal einen Plan mit 24 Tabs...

Danke für Ihre Hilfe


A21-0616-D18.slddrw
A21-0616-D18.sldprt

Versuchen Sie dies, ich habe gerade eine Exportoption in DXF hinzugefügt, nur das aktive Blatt, und ich aktiviere die Schnittblätter nacheinander, bevor ich exportiere:

Const INCLUDE_DRAWING_NAME As Boolean = True

Dim swApp As SldWorks.SldWorks

Sub main()

    Set swApp = Application.SldWorks
    
try_:
    
    On Error GoTo catch_
    
    Dim swDraw As SldWorks.DrawingDoc
    
    Set swDraw = swApp.ActiveDoc
    
    
    Dim swModel As SldWorks.ModelDoc2
    Set swModel = swDraw
        
    If swModel.GetPathName() = "" Then
        Err.Raise vbError, "", "Please save drawing"
    End If
        
    Dim vSheetNames As Variant
    
    Dim i As Integer
    
    Dim swSelMgr As SldWorks.SelectionMgr
    
    Set swSelMgr = swModel.SelectionManager
    
    Dim selSheetNames() As String
    
    For i = 1 To swSelMgr.GetSelectedObjectCount2(-1)
        
        If swSelMgr.GetSelectedObjectType3(i, -1) = swSelectType_e.swSelSHEETS Then
            
            If (Not selSheetNames) = -1 Then
                ReDim selSheetNames(0)
            Else
                ReDim Preserve selSheetNames(UBound(selSheetNames) + 1)
            End If
            Dim swSheet As SldWorks.Sheet
            Set swSheet = swSelMgr.GetSelectedObject6(i, -1)
            
            selSheetNames(UBound(selSheetNames)) = swSheet.GetName()
            
        End If
    Next
    
    If (Not selSheetNames) = -1 Then
        vSheetNames = swDraw.GetSheetNames
    Else
        vSheetNames = selSheetNames
    End If
    
    For i = 0 To UBound(vSheetNames)
        
        Dim sheetName As String
        sheetName = vSheetNames(i)
        
        Dim swExpPdfData As SldWorks.ExportPdfData
        Set swExpPdfData = swApp.GetExportFileData(swExportDataFileType_e.swExportPdfData)
        
        Dim errs As Long
        Dim warns As Long
        
        Dim expSheets(0) As String
        expSheets(0) = sheetName
        
        swExpPdfData.ExportAs3D = False
        swExpPdfData.ViewPdfAfterSaving = False
        swExpPdfData.SetSheets swExportDataSheetsToExport_e.swExportData_ExportSpecifiedSheets, expSheets
        
        Dim drawName As String
        drawName = swModel.GetPathName()
        drawName = Mid(drawName, InStrRev(drawName, "\") + 1, Len(drawName) - InStrRev(drawName, "\") - Len(".slddrw"))
        
        Dim outFile As String
        outFile = swModel.GetPathName()
        outFile = Left(outFile, InStrRev(outFile, "\"))
        Debug.Print outFile
        Debug.Print sheetName
        
        If sheetName Like "Découpe*" Then 'Si Le nom de la feuille commence par Découpe, suivit de aucun ou plusieurs caractères
                Debug.Print "Fichier dxf à traiter"
                'On active la feuille découpe
                Dim bRet As Boolean
                bRet = swDraw.ActivateSheet(sheetName)
                'Export en dxf à ajouter ici
                Debug.Print Mid(sheetName, 9)
                outFile = outFile & Mid(sheetName, 9) & ".dxf"
                Debug.Print "outfile=" & outFile
                
                'Option dxf
                intUserDWGSheetExport = swApp.GetUserPreferenceIntegerValue(swUserPreferenceIntegerValue_e.swDxfMultiSheetOption)
                swApp.SetUserPreferenceIntegerValue swUserPreferenceIntegerValue_e.swDxfMultiSheetOption, swDxfMultisheet_e.swDxfActiveSheetOnly
                
                'swModel.Extension.SaveAs(outFile, swSaveAsVersion_e.swSaveAsCurrentVersion, swSaveAsOptions_e.swSaveAsOptions_Silent, swExpPdfData, errs, warns)
                If False = swModel.Extension.SaveAs(outFile, SwConst.swSaveAsVersion_e.swSaveAsCurrentVersion, SwConst.swSaveAsOptions_e.swSaveAsOptions_Silent, Nothing, errs, warns) Then
                    Err.Raise vbError, "", "Failed to export dxf to " & outFile
                End If
                
                'on réinitialise les options.
                swApp.SetUserPreferenceIntegerValue swUserPreferenceIntegerValue_e.swDxfMultiSheetOption, intUserDWGSheetExport
                
        Else
            Debug.Print "Fichier pdf à traiter"
            outFile = outFile & IIf(INCLUDE_DRAWING_NAME, drawName & "_", "") & sheetName & ".pdf"
            If False = swModel.Extension.SaveAs(outFile, swSaveAsVersion_e.swSaveAsCurrentVersion, swSaveAsOptions_e.swSaveAsOptions_Silent, swExpPdfData, errs, warns) Then
                Err.Raise vbError, "", "Failed to export PDF to " & outFile
            End If
        
        End If
 Next
    
    
    GoTo finally_
    
catch_:
    
    swApp.SendMsgToUser2 Err.Description, swMessageBoxIcon_e.swMbStop, swMessageBoxBtn_e.swMbOk
    
finally_:
    
End Sub

BEARBEITEN: und ich lösche 9 Zeichen statt 8, um auch das Leerzeichen nach dem Ausschneiden auszuschließen, das den Export verhindert hat (ein Dateiname darf nicht mit Leerzeichen beginnen)