Schritt- und PDF-Export aller geöffneten Dateien

Tag zusammen!

Über ein Excel-Makro öffne ich eine Reihe von Teilen in SolidWorks. Ich möchte ein Makro erstellen, das es Ihnen ermöglicht, den Plan des ersten aktiven Dokuments zu öffnen, es als PDF zu speichern, den Plan zu schließen, den Teil in STEP zu speichern und dann den Raum zu schließen und zum nächsten Raum zu wechseln.

Ich fange gerade erst in der Welt der Makros an, also schaue ich mir alles an, was gemacht wird, und ich habe es rechts und links aufgegriffen.

So speichern Sie einen Plan in der Kläranlage:

    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

 

So speichern Sie einen Plan in der Kläranlage:

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

 

Die Probleme, die ich habe, sind die folgenden:

- Ich kann keine Codezeile finden, mit der ich den Plan des aktiven Dokuments (das noch ein Raum ist) öffnen kann. Ich habe versucht, diese Linie mit dem SoildWorks Makrorecorder zu erstellen und mit der rechten Maustaste auf den Blalba-Teil zu klicken/zu öffnen. SLDPRT im Plan, aber es erspart mir als eine Zeile Code das Öffnen des Plans bla bla. SLDDRW und nicht das Öffnen des Plans des aktiven Dokuments.

- Und mein zweites Problem besteht darin, eine Schleife zu erstellen. Ich habe die Struktur meiner Schleife gefunden:

Sub boucle_while()


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


    Wend
       
End Sub

 

Aber ich weiß nicht, wie ich ihn bitten soll, zu überprüfen, ob es tatsächlich ein aktives Dokument gibt!

Ich denke, ich bin nicht sehr weit von der Sache entfernt, Sie müssen nur den Zustand überprüfen, herausfinden, wie Sie den Plan öffnen können...

Vielen Dank an alle, die sich die Zeit nehmen, einen Blick auf mein Problem zu werfen =)!

Hallo

Für die Schleifenbedingung ist es einfach, Sie müssen überprüfen, ob tatsächlich ein aktives Dokument vorhanden ist. Verwenden Sie dazu Folgendes:

Obwohl SwApp.ActiveDoc nichts <> (oder nichts ist, kann ich mich nicht an die akzeptierte Syntax erinnern)

Um die TGA für ein Teil oder eine Baugruppe zu öffnen, gehen Sie die referenzierten Dokumente für dieses Teil oder diese Baugruppe durch.

2 „Gefällt mir“

Hallo

Indem Sie in Eile an der Sache herumbasteln und wenn Ihre Pläne im selben Ordner wie Ihre Teile gespeichert sind:

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

 

Seien Sie vorsichtig, Sie müssen Überprüfungen hinzufügen wie:

- Wenn es sich bei meinem Dokument um ein Dokument handelt, dann ... sonst...

- Wenn ich keinen Plan finde, dann ....

-etc

Wenn Ihre Pläne nicht im selben Ordner wie Ihre Dokumente gespeichert sind, müssen Sie die referenzierten Dokumente durchgehen, wie Yves T. sagte.

Herzliche Grüße

2 „Gefällt mir“

Hallo D.Roger

Ich weiß, dass Sie dies schnell getan haben, aber unter den  Bedingungen für den Schritt scheint es mir, dass wir zwischen den verschiedenen Arten von Schritten unterscheiden müssen, da sonst die Gefahr besteht, dass bestimmte STEP-Formate ausgeschlossen werden und möglicherweise falsch negative Ergebnisse entstehen.

Was denkst du?

Herzliche Grüße

1 „Gefällt mir“

Hallo Zozo_mp,

Ja, das habe ich schnell gemacht, ohne mir Gedanken über die zu machenden Überprüfungen zu machen, um die verschiedenen möglichen Fehler zu behandeln, oder die Exportoptionen für die Schrittdateien. , dieser ist standardmäßig auf "AP203" eingestellt, denke ich. Um "AP214" zu wählen, müssen Sie nur die Zeile "boolstatus = swApp.SetUserPreferenceIntegerValue(swStepAP, 214)" nach der Zeile "Set swApp = Application.SldWorks" setzen, es ist auch möglich, andere Exportoptionen im Makrocode zu verwalten, siehe http://help.solidworks.com/2017/english/api/swconst/filesaveasstepoptions.htm.

Es ist möglich, das Gleiche mit dem PDF-Export zu tun, um bestimmte Optionen zu verwalten, siehe http://help.solidworks.com/2017/english/api/sldworksapi/SolidWorks.Interop.sldworks~SolidWorks.Interop.sldworks.IExportPdfData.html.

Es hängt alles davon ab, wie nützlich das Makro in einem bestimmten Kontext ist...

Herzliche Grüße

2 „Gefällt mir“

Hallo Thread!

Vielen Dank für Ihre Antworten, ich verstehe jetzt (naja, denke ich), wie man den Plan/Raum eines Raumes/Plans öffnen kann, wenn sie den gleichen Namen und den gleichen Pfad haben und das ist großartig, es wird für mich sehr nützlich sein, dies zu tun =)!

Kurz gesagt, über ein Excel-Makro öffne ich alle Teile derselben Familie in einer Materialtabelle (bearbeitete Teile, mechanisch geschweißte Teile, Blechteile usw.). Dann gibt es noch das SolidWorks-Makro, mit dem Sie alle neutralen Dateien erstellen können, um den Versand an Subunternehmer zu vereinfachen, denn heute erfassen wir alles von Hand und es ist eine Quelle von Vergesslichkeit, Fehlern und einer enormen Zeitverschwendung ^^! Das ist ein bisschen für den Kontext ☺!

Was den Code betrifft, den d.roger gepostet hat, so habe ich ihn für mich etwas strukturierter und detaillierter formuliert, damit ich mich leichter zurechtfinde:

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

Ich begann die Lesung Schritt für Schritt, auf der Linie

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

Der Plan wird nicht geöffnet. Also sagt er mir unweigerlich in der Leitung, dass es einen Fehler gibt, weil er das Teil nicht in PDF speichern kann. Ich habe auch die Zeile hinzugefügt, um den Datensatz in STEP 214 anzugeben, aber es ist eine Variable, der ich einen Wert gebe, oder? Ich muss die obige Variable mit etwas wie Dim boolstatus als "Ich weiß nicht was" deklarieren?

 

Nochmals vielen Dank für die Hilfe =)

Hallo

Ich sehe in Ihrem Profil, dass Sie Epdm haben, wenn der Plan darin gespeichert ist, müssen Sie ihn in Ihren lokalen Cache zurückführen, bevor Sie das Makro starten, oder, besser, tun Sie dies über Ihr Makro, was auch das Lesen der EPDM-APIs erfordert!!

Dim boolstatus Als boolescher Wert

Herzliche Grüße

1 „Gefällt mir“