Stap en pdf export van alle geopende bestanden

Hallo allemaal!

Via een Excel macro open ik een aantal onderdelen in SolidWorks. Ik zou graag een macro willen maken waarmee je het plan van het eerste actieve document kunt openen, het als PDF kunt opslaan, het plan kunt sluiten, het deel in STEP kunt opslaan en vervolgens de kamer kunt sluiten en naar de volgende kamer kunt gaan.

Ik ben net begonnen in de wereld van macro's, dus ik kijk naar alles wat er wordt gedaan en ik heb het rechts en links opgepakt.

Een plan opslaan in RWZI:

    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

 

Een plan opslaan in RWZI:

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

 

De problemen die ik heb zijn de volgende:

- Ik kan geen regel code vinden waarmee ik het plan van het actieve document (dat nog steeds een kamer is) kan openen. Ik heb geprobeerd deze regel te maken met de SoildWorks-macrorecorder en met de rechtermuisknop te klikken / de weddenschap op het blalba-gedeelte te openen. SLDPRT in plan, maar het bespaart me als een regel code de opening van het plan bla bla. SLDDRW en niet de opening van het plan van het actieve document.

- En mijn tweede probleem is het maken van een lus. Ik heb de structuur van mijn lus gevonden:

Sub boucle_while()


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


    Wend
       
End Sub

 

Maar ik weet niet hoe ik hem moet vragen om te controleren of er inderdaad een actief document is!

Ik denk dat ik niet ver van het ding verwijderd ben, je hoeft alleen maar de staat te controleren, te vinden hoe je het plan kunt openen...

Bedankt aan degenen die de tijd nemen om mijn probleem te bekijken =)!

Hallo

Voor de lusvoorwaarde is het eenvoudig, je moet controleren of er inderdaad een actief document is. Gebruik hiervoor het volgende:

Hoewel het niet SwApp.ActiveDoc niets <> (of niets is, kan ik me de geaccepteerde syntaxis niet herinneren)

Om de MEP voor een onderdeel of assemblage te openen, doorloopt u de documenten waarnaar wordt verwezen voor dat onderdeel of die assemblage.

2 likes

Hallo

Door op een "haastige" manier aan het ding te sleutelen en als je plannen in dezelfde map zijn opgeslagen als je onderdelen:

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

 

Wees voorzichtig, u moet controles toevoegen zoals:

- Als mijn document een document is, dan... anders...

- Als ik geen plan kan vinden dan....

-enz

Als uw plannen niet in dezelfde map zijn opgeslagen als uw documenten, moet u de documenten waarnaar wordt verwezen doornemen, zoals Yves T. zei.

Vriendelijke groeten

2 likes

Hallo D.Roger

Ik weet dat u dit snel hebt gedaan, maar in de  omstandigheden met betrekking tot de stap lijkt het mij dat we een onderscheid moeten maken tussen de verschillende soorten stappen, anders bestaat het risico dat bepaalde STEP-formaten worden uitgesloten en mogelijk vals-negatieven worden veroorzaakt.

Wat denk je?

Vriendelijke groeten

1 like

Hallo Zozo_mp,

Ja, dat deed ik snel zonder me zorgen te maken over de controles die moesten worden uitgevoerd om de verschillende mogelijke fouten aan te pakken of de exportopties voor de stapbestanden. , deze is ingesteld op "AP203" bij standaard denk ik. Om "AP214" te kiezen hoef je alleen maar de regel "boolstatus = swApp.SetUserPreferenceIntegerValue(swStepAP, 214)" achter de regel "Set swApp = Application.SldWorks" te zetten, het is ook mogelijk om andere exportopties in de macrocode te beheren, zie http://help.solidworks.com/2017/english/api/swconst/filesaveasstepoptions.htm.

Het is mogelijk om hetzelfde te doen met de pdf-export om bepaalde opties te beheren, zie http://help.solidworks.com/2017/english/api/sldworksapi/SolidWorks.Interop.sldworks~SolidWorks.Interop.sldworks.IExportPdfData.html.

Het hangt allemaal af van hoe nuttig de macro is in een bepaalde context...

Vriendelijke groeten

2 likes

Hoi draad!

Heel erg bedankt voor je antwoorden, ik begrijp nu (nou ja, denk ik) hoe ik het plan/de kamer van een kamer/plan kan openen als ze dezelfde naam en hetzelfde pad hebben en dat is geweldig, het zal erg handig voor mij zijn om dat te doen =)!

Kortom, via een Excel-macro open ik alle onderdelen van dezelfde familie in een tabel met materialen (bewerkte onderdelen, mechanisch gelaste onderdelen, plaatwerkonderdelen, enz.). Dan is er de SolidWorks-macro om alle neutrale bestanden te kunnen maken om verzendingen naar onderaannemers te vereenvoudigen, want tegenwoordig nemen we alles met de hand op en het is een bron van vergeetachtigheid, fouten en een enorme verspilling van tijd ^^! Dat is een beetje voor de context ☺!

Wat betreft de code die d.roger heeft gepost, ik heb deze voor mij wat gestructureerder en gedetailleerder gezet, zodat ik gemakkelijker mijn weg kan vinden:

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

Ik begon het lezen stap voor stap, op de lijn

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

Het plan wordt niet geopend. Dus onvermijdelijk vertelt hij me aan de lijn dat er een fout is gemaakt omdat hij het onderdeel niet in PDF kan opslaan. Ik heb ook de regel toegevoegd om het record in STAP 214 te specificeren, maar het is een variabele waaraan ik een waarde geef, toch? Ik moet de variabele hierboven declareren met iets als Dim boolstatus als "Ik weet niet wat"?

 

Nogmaals bedankt voor de hulp =)

Hallo

Ik zie op je profiel dat je Epdm hebt, als het plan erin is opgeslagen, moet je het naar je lokale cache repatriëren voordat je de macro start of, beter, doe het via je macro, waarvoor je ook de EPDM-API's moet lezen!!

Dim boolstatus Als boolean

Vriendelijke groeten

1 like