Eksport makr DXF arkusz po arkuszu

Cześć,

Dziękuję za opinię, przepraszam, nie jestem użytkownikiem forum, nie znam zasad, których powinienem przestrzegać. :sweat_smile:

Poniżej przedstawiam moje 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

W każdym razie bardzo wam wszystkim dziękuję. :grin:
Manu

Cześć;

Ogólnie nie widzę zbyt wielu nieścisłości w kodzie, żeby zobaczyć, co mówi więcej profesjonalistów ode :sweat_smile: mnie.
Po prostu użyłbym zmiennej dla właściwości " Rewizja "
Styl:

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

A żeby dodać numer strony, dlaczego nie użyć (i+1)?
To da:

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

Poza tym nie jestem fanem używania "  ." kropek w nazwie pliku,
Więc (ale to opcjonalne): dateNow = Replace(Date, " / ", " _  ") 

I na koniec dodam sprawdzenie, czy MyRevision nie jest " Pusty" :

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

Aby zaoszczędzić trochę czasu, można wyłączyć aktualizacje graficzne Solidworks podczas przetwarzania:

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

Ale będą musiały zostać ponownie aktywowane po zakończeniu leczenia:

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

Cześć,
Wszystko zależy od " ciężkości " każdego liścia.
Możliwe, że SW laguje na tym poziomie (mam podobne zachowanie na niektórych makrach, które eksportują tylko prosty PDF)

Jednocześnie ponad 100 arkuszy, wcale nie dziwię, że się opóźnia!

I to tylko potwierdza mój sposób działania:
1 element = jeden plik = 1 plan, a następnie montaż (z wyjątkiem konstrukcji spawanych z rurami wielokorpusowymi)

OK, dziękuję za opinię.
Próbuję to zmodyfikować i próbuję mojej następnej generacji DXF.

Dla twojej informacji, zajmuję się spawaną konstrukcją do modelowania mebli, więc w zależności od rodzaju mebli może być wiele elementów do zaplanowania. I proszono mnie, żebym oczyścił jak najwięcej liści, czyli dużo liści na ten sam kawałek.

W każdym razie bardzo dziękuję wszystkim za czas, który poświęciliście na odpowiedź.