DXF-Makro-Export Blatt für Blatt

Hallo,

Danke für das Feedback, tut mir leid, ich bin kein Forenkonsument, ich kenne die Regeln nicht. :sweat_smile:

Unten ist mein Makro:

Option Explicit
Dim swApp       As SldWorks.SldWorks
Dim swModel     As SldWorks.ModelDoc2
Dim swDraw      As SldWorks.DrawingDoc
Dim swCustProp  As CustomPropertyManager
Dim valOut1     As String
Dim resolvedValOut1 As String
Dim sPathname   As String
Dim vSheetName  As Variant
Dim nErrors     As Long
Dim nWarnings   As Long
Dim i           As Long
Dim bRet        As Boolean
Dim lParam      As Long

Sub main()
    Set swApp = Application.SldWorks
    Set swModel = swApp.ActiveDoc
    Set swDraw = swModel
    
    lParam = swApp.GetUserPreferenceIntegerValue(swDxfMultiSheetOption)
    
    'Changement paramétrage export dxf si différent de feuille active
    If lParam <> 0 Then
        bRet = swApp.SetUserPreferenceIntegerValue(swUserPreferenceIntegerValue_e.swDxfMultiSheetOption, swDxfMultisheet_e.swDxfActiveSheetOnly)
    End If
    
    ' On récupère la date du jour et on la met dans un format pouvant se mettre dans le nom d'un fichier
    Dim dateNow As String
    dateNow = Replace(Date, "/", ".")
    
    ' On récupère les valeurs qui nous intéresse dans les propriétés personnalisées du plan
    Set swCustProp = swModel.Extension.CustomPropertyManager("")
    swCustProp.Get2 "Révision", valOut1, resolvedValOut1

    sPathname = Replace(swModel.GetPathName, ".SLDDRW", "")
    vSheetName = swDraw.GetSheetNames
    For i = 0 To UBound(vSheetName)
        bRet = swDraw.ActivateSheet(vSheetName(i))
        bRet = swModel.SaveAs4(sPathname & " - " & resolvedValOut1 & " - " & dateNow & "_" & vSheetName(i) & ".dxf", swSaveAsCurrentVersion, swSaveAsOptions_Silent, nErrors, nWarnings)
    Next i
    
    ' Retour à la Feuille 1
    bRet = swDraw.ActivateSheet(vSheetName(0))
    
    ' Remise en place du paramétrage initial
    bRet = swApp.SetUserPreferenceIntegerValue(swUserPreferenceIntegerValue_e.swDxfMultiSheetOption, lParam)
End Sub

Jedenfalls danke ich euch allen sehr. :grin:
Manu

Hallo;

Insgesamt sehe ich nicht allzu viele Widersprüche im Code, um zu sehen, was mehr Fachleute als ich dazu :sweat_smile: sagen.
Ich hätte einfach eine Variable für die Eigenschaft " Revision " verwendet
Stil:

Dim MyRevision as string
dann
MyRevision = swCustProp.Get2 "Révision", valOut1, resolvedValOut1

Und um die Seitenzahl hinzuzufügen, warum nicht (i+1) verwenden?
Dies ergibt:

bRet = swModel.SaveAs4(sPathname & " - " & MyRevision & " - " & dateNow & "_" & vSheetName(i) & i+1 & ".dxf", swSaveAsCurrentVersion, swSaveAsOptions_Silent, nErrors, nWarnings)

Außerdem bin ich kein großer Fan davon, " ." Punkte im Dateinamen zu verwenden,
Also (aber es ist optional): dateNow = Ersetzen(Date, " / ", " _ ")

Und zum Schluss werde ich eine Kontrolle hinzufügen, um zu prüfen, ob MyRevision nicht " Leer" ist:

If MyRevision ="" then
 msgbox ("La propriété Révision n’existe pas.")
exit sub
end if

Um etwas Zeit zu sparen, ist es möglich, grafische Solidworks-Updates während der Verarbeitung zu deaktivieren:

swModel.FeatureManager.EnableFeatureTree = False 'Désactivation de la mise à  jour treeManager
modView.EnableGraphicsUpdate = False 'Désactivation de la mise à  jour graphique
EnableFeatureTreeWindow = False 'Désactivation de la mise à  jour de la fenetre

Aber sie müssen am Ende der Behandlung wieder aktiviert werden:

swModel.FeatureManager.EnableFeatureTree = True 'Activation de la mise à  jour treeManager
modView.EnableGraphicsUpdate = True 'Activation de la mise à  jour graphique
EnableFeatureTreeWindow = True 'Activation de la mise à  jour de la fenetre

Hallo,
Es hängt alles von der " Schwere " jedes einzelnen Blattes ab.
Es ist möglich, dass SW auf dieser Ebene laggt (ich habe bei einigen Makros, die nur einen einfachen PDF-Export durchführen, ähnliches Verhalten).

Gleichzeitig mehr als 100 Blätter, überhaupt nicht überraschend, dass es laggt!

Und das bestärkt meine Vorgehensweise:
1 Stück = eine Feile = 1 Plan, dann Montage (außer bei Mehrkörper-Rohrschweißkonstruktionen)

Okay, danke für dein Feedback.
Ich versuche, das zu modifizieren, und ich probiere meine nächste Generation von DXF aus.

Zu deiner Information: Ich bin im Bereich Schweißbau für Möbelmodellierung, daher kann es je nach Möbel viele Teile zu planen geben. Und ich werde gebeten, so viele Blätter wie möglich zu reinigen, also viele Blätter für ein und dasselbe Stück.

Jedenfalls danke ich Ihnen allen sehr für die Zeit, die Sie sich zur Verfügung genommen haben, um mir zu antworten.