Eksport krok po kroku i PDF wszystkich otwartych plików

Cześć wszystkim!

Za pomocą makra programu Excel otwieram kilka części w SolidWorks. Chciałbym zrobić makro, które pozwoli Ci otworzyć plan pierwszego aktywnego dokumentu, zapisać go jako PDF, zamknąć plan, zapisać część w STEP, a następnie zamknąć pomieszczenie i przejść do następnego pokoju.

Dopiero zaczynam przygodę z makrami, więc patrzę na wszystko, co jest robione i chwytam to na prawo i lewo.

Aby zapisać plan w oczyszczalni ścieków:

    Dim swApp As SldWorks.SldWorks
    Dim swModel As SldWorks.ModelDoc2
      
    Sub main()
      
    Set swApp = Application.SldWorks
    Set swModel = swApp.ActiveDoc
    swModel.Extension.SaveAs Left(swModel.GetPathName, InStrRev(swModel.GetPathName, ".")) & "STEP", 0, 0, Nothing, 0, 0
    
    swApp.CloseDoc Path
        
    End Sub

 

Aby zapisać plan w oczyszczalni ścieków:

Dim swApp As Object

Dim Part As Object

Dim boolstatus As Boolean

Dim longstatus As Long, longwarnings As Long

Dim FeatureData As Object

Dim Feature As Object

Dim Component As Object

 

Sub main()

Set swApp = Application.SldWorks

 

Set Part = swApp.ActiveDoc

Path = Part.GetPathName                                                     'chemin du fichier

Part.SaveAs2 Left(Path, (Len(Path) - 6)) & "PDF", 0, True, False            'Sauvegarde au format PDF

Set Part = Nothing

swApp.CloseDoc Path

End Sub

 

Problemy, które mam, są następujące:

- Nie mogę znaleźć linii kodu, która pozwala mi otworzyć plan aktywnego dokumentu (który nadal jest pokojem). Próbowałem utworzyć tę linię za pomocą rejestratora makr SoildWorks i kliknąć prawym przyciskiem myszy/otworzyć zakład na część blalba. SLDPRT w planie, ale oszczędza mi jako linię kodu otwarcie planu bla bla. SLDDRW, a nie otwarcie planu aktywnego dokumentu.

- A moim drugim problemem jest stworzenie pętli. Znalazłem strukturę mojej pętli:

Sub boucle_while()


   While ?????????????? 'TANT QUE un document est actif
       


    Wend
       
End Sub

 

Ale nie wiem, jak go poprosić, aby sprawdził, czy rzeczywiście istnieje aktywny dokument!

Myślę, że nie jestem daleko od rzeczy, po prostu musisz sprawdzić stan, dowiedzieć się, jak otworzyć plan...

Dziękuję tym, którzy poświęcą czas, aby przyjrzeć się mojemu problemowi =)!

Witam

W przypadku warunku pętli jest to proste, musisz sprawdzić, czy rzeczywiście istnieje aktywny dokument. Aby to zrobić, użyj:

Chociaż SwApp.ActiveDoc nie <> niczym (lub jest niczym, nie pamiętam akceptowanej składni)

Aby otworzyć instalację dla części lub zespołu, należy przejrzeć dokumenty, do których odnoszą się odniesienia dla tej części lub zespołu.

2 polubienia

Witam

Majstrując przy rzeczy w "pośpiechu" i jeśli Twoje plany są przechowywane w tym samym folderze co Twoje części:

Dim swApp As Object
Sub main()
    Dim swModel As SldWorks.ModelDoc2
    Dim longstatus As Long, longwarnings As Long
    Set swApp = Application.SldWorks
    While Not swApp.ActiveDoc Is Nothing
        Set swModel = swApp.ActiveDoc
        Path = swModel.GetPathName
        Path = Left(Path, (Len(Path) - 6)) & "slddrw"
        Set swModel = swApp.OpenDoc6(Path, 3, swOpenDocOptions_Silent, "", longstatus, longwarnings)
        swModel.SaveAs2 Left(Path, (Len(Path) - 6)) & "PDF", 0, True, False
        swApp.CloseDoc Path
        Set swModel = swApp.ActiveDoc
        Path = swModel.GetPathName
        swModel.SaveAs2 Left(Path, (Len(Path) - 6)) & "step", 0, True, False
        swApp.CloseDoc Path
        Set swModel = swApp.ActiveDoc
    Wend
End Sub

 

Bądź ostrożny, musisz dodać kontrole, takie jak:

- Jeśli mój dokument jest dokumentem, to... inaczej...

- Jeśli nie mogę znaleźć planu, to...

-itd

Jeśli Twoje plany nie są przechowywane w tym samym folderze co Twoje dokumenty, musisz przejrzeć dokumenty, do których się odwołujesz, jak powiedział Yves T.

Pozdrowienia

2 polubienia

Witaj D.Roger

Wiem, że zrobił pan to szybko, ale wydaje mi się, że w  warunkach dotyczących etapu musimy dokonać rozróżnienia między różnymi rodzajami kroków, w przeciwnym razie grozi to wykluczeniem niektórych formatów STEP i możliwym wynikiem fałszywie ujemnym.

Co myślisz?

Pozdrowienia

1 polubienie

Witaj Zozo_mp,

Tak, zrobiłem to szybko, nie martwiąc się o kontrole, które należy wykonać, aby poradzić sobie z różnymi możliwymi błędami lub opcjami eksportu plików kroków. , ten jest domyślnie ustawiony na "AP203", jak sądzę. Aby wybrać "AP214" wystarczy wpisać wiersz "boolstatus = swApp.SetUserPreferenceIntegerValue(swStepAP, 214)" po wierszu "Set swApp = Application.SldWorks", możliwe jest również zarządzanie innymi opcjami eksportu w kodzie makra, patrz http://help.solidworks.com/2017/english/api/swconst/filesaveasstepoptions.htm.

To samo można zrobić z eksportem PDF, aby zarządzać niektórymi opcjami, patrz http://help.solidworks.com/2017/english/api/sldworksapi/SolidWorks.Interop.sldworks~SolidWorks.Interop.sldworks.IExportPdfData.html.

Wszystko zależy od tego, jak użyteczne jest makro w danym kontekście...

Pozdrowienia

2 polubienia

Cześć wątek!

Bardzo dziękuję za odpowiedzi, teraz rozumiem (myślę), jak otworzyć plan/pokój pokoju/planu, jeśli mają tę samą nazwę i tę samą ścieżkę i to jest świetne, będzie to dla mnie bardzo przydatne =)!

Krótko mówiąc, za pomocą makra Excela otwieram wszystkie części z tej samej rodziny w tabeli materiałów (części obrabiane, części spawane mechanicznie, części blaszane itp.). Jest też makro SolidWorks, aby móc tworzyć wszystkie neutralne pliki, aby uprościć wysyłki do podwykonawców, ponieważ dzisiaj rejestrujemy wszystko ręcznie i jest to źródłem zapomnień, błędów i ogromnej straty czasu ^^! To trochę dla kontekstu ☺ !

Jeśli chodzi o kod, który opublikował d.roger, umieściłem go dla mnie nieco bardziej uporządkowany i szczegółowy, abym mógł łatwiej się w nim odnaleźć:

Dim swApp As Object

Sub main()

'Déclaration des variables :

    Dim swModel As SldWorks.ModelDoc2
    Dim longstatus As Long, longwarnings As Long

'Initialisation de certaines variables :
    
    Set swApp = Application.SldWorks
    boolstatus = swApp.SetUserPreferenceIntegerValue(swStepAP, 214)
    
'Mise en place de la boucle :
    
    While Not swApp.ActiveDoc Is Nothing 'Tant qu'il y a un document actif alors
    
        Set swModel = swApp.ActiveDoc                                                                 'Document sur lequel se passe les actions à venir
        Path = swModel.GetPathName                                                                    'Extraction du chemin d'enregistrement de la pièce
        Path = Left(Path, (Len(Path) - 6)) & "slddrw"                                                 'Concatène le nom et l'extension .SLDDrW pour avoir le nom complet du plan (C/..../plan.SLDDRW)
        Set swModel = swApp.OpenDoc6(Path, 3, swOpenDocOptions_Silent, "", longstatus, longwarnings)  'Ouverture du plan
        swModel.SaveAs2 Left(Path, (Len(Path) - 6)) & "PDF", 0, True, False                           'Enregistrement en PDF
        swApp.CloseDoc Path                                                                           'Fermeture du plan
        
        Set swModel = swApp.ActiveDoc                                                                 'Document sur lequel se passe les actions à venir
        Path = swModel.GetPathName                                                                    'Extraction du chemin d'enregistrement de la pièce
        swModel.SaveAs2 Left(Path, (Len(Path) - 6)) & "step", 0, True, False                          'Enregistrement en STEP
        swApp.CloseDoc Path                                                                           'Fermeture du plan
        
        Set swModel = swApp.ActiveDoc                                                                 'Je ne comprends pas trop à quoi il sert ? Pour activer le document suivant pour que la boucle puisse se répéter ?
        
    Wend
    
End Sub

Zaczęłam czytać krok po kroku, na linii

Set swModel = swApp.OpenDoc6(Path, 3, swOpenDocOptions_Silent, "", longstatus, longwarnings) 

Plan się nie otwiera. Więc nieuchronnie na linii mówi mi, że wystąpił błąd, ponieważ nie może zapisać części w PDF. Dodałem również linię, aby określić rekord w KROKU 214, ale jest to zmienna, której podaję wartość, prawda? Muszę zadeklarować powyższą zmienną za pomocą czegoś w rodzaju Dim boolstatus Jako "Nie wiem co"?

 

Jeszcze raz dziękuję za pomoc =)

Witam

Widzę na twoim profilu, że masz Epdm, jeśli plan jest w nim zapisany, musisz go repatriować do lokalnej pamięci podręcznej przed uruchomieniem makra lub, lepiej, zrobić to za pomocą makra, co również będzie wymagało odczytania interfejsów API EPDM!!

Dim boolstatus As boolean

Pozdrowienia

1 polubienie