Betätigen der Makroblockleiste für alle Teile einer Baugruppe

Hallo ihr alle

Kennt jemand ein Makro, um die Fixierleiste für alle Teile einer Baugruppe zu bedienen (siehe alle Teile verschiedener Unterbaugruppen, wenn möglich)?

Ich suche, kann es aber nicht finden...

Vielen Dank!

Ich habe dieses Makro gefunden, das nicht immer funktioniert, hatte aber keine Zeit, tiefer zu graben:

'       MODULE:         FREEZE PARTS

'       PROGRAMMER:     DMITRY ZAMOSHNIKOV

'       DATE:           11/13/2013

'       PURPOSE:

'           GO THROUGH AN ASSEMBLY AND FREEZE EVERY PART IN THE ASSEMBLY.

'       FUNCTION: FREEZE_ALL

'           IN: NONE

'           OUT: ALL PARTS==FROZEN?

'

 

 

Dim swdoc As SldWorks.ModelDoc2

Dim swAllDocs As EnumDocuments2

Dim FirstDoc As SldWorks.ModelDoc2

Dim boolstatus As Boolean

Dim NumDocsReturned As Long

Dim DocCount As Long

Dim swapp As SldWorks.SldWorks

Dim longstatus As Long

Dim part As Object

 

 

'   FREEZE_ALL

'       WHILE (PARTS IN ASSEMBLY NOT FROZEN > 0 )

'           OPEN PART

'           FREEZE PART

'           SAVE PART

'           CLOSE PART

'       WEND

Public Sub FREEZE_ALL()

    Set swapp = Application.SldWorks

    Set swAllDocs = swapp.EnumDocuments2

    Set FirstDoc = swapp.ActiveDoc

 

    DocCount = 0

    swAllDocs.Reset

    swAllDocs.Next 1, swdoc, NumDocsReturned

 

 

    ' This loop will go through all of the documents within an assembly, including sub-assemblies.

    While NumDocsReturned <> 0

            bDocWasVisible = swdoc.Visible ' Use Hidden Parts

 

            ' script crashed if an attempt to freeze an assembly is made.

            ' check the file to make sure it's a "sldprt" file.

            If (UCase(Right(swdoc.GetPathName, 6)) = UCase("sldprt")) Then

                swapp.ActivateDoc2 swdoc.GetPathName, True, longstatus 'open and activate the part

                boolstatus = swdoc.FeatureManager.EditFreeze(swMoveFreezeBarTo_e.swMoveFreezeBarToEnd, "", True)    ' move the freeze bar to the end

                swdoc.SaveAs (swdoc.GetPathName)    ' save the change

                swapp.CloseDoc (swdoc.GetTitle())   ' close the part

            End If

 

            swAllDocs.Next 1, swdoc, NumDocsReturned   ' Go to the next part

            DocCount = DocCount + 1    ' Keep a count of all parts within the assembly, including sub-assemblies.

    Wend

 

 

End Sub

 

 

Sub FREEZE_ONE()

 

    Set swapp = Application.SldWorks

 

    Set part = swapp.ActiveDoc

    boolstatus = part.FeatureManager.EditFreeze(swMoveFreezeBarTo_e.swMoveFreezeBarToEnd, "", True)

 

    part.SaveAs (part.GetPathName)

    'swapp.CloseDoc part.GetTitle()

 

 

End Sub

Der ursprüngliche Link:

https://forum.solidworks.com/thread/74956

Hallo

Oder das Tool "Integration" in myCADtools

https://help.visiativ.com/mycadtools/2021/fr/Integration114.html 

Cdlt

Alan

Vielen Dank für Ihr Feedback.

@sbadenis, ich hatte dieses Makro auch gefunden, aber es funktioniert nicht (außer individuell direkt am Teil, was nicht sehr nützlich ist...)

@acombier habe ich mycadtools leider nicht. Wir sind immer noch in SW2016 SP05 ohne Support.... (Kein Kommentar).

Ich habe es gerade erneut an einer Baugruppe getestet und es scheint zu funktionieren.

Starten Sie das freezeALL-Abo?

Wenn Sie das Einfrieren starten, funktioniert es nur für das aktuelle Teil.

Grundsätzlich müssen Sie das Makro (?) ausführen:

' MODUL: TEILE EINFRIEREN ' PROGRAMMIERER: DMITRY ZAMOSHNIKOV ' DATUM: 13.11.2013 ' ZWECK: ' DURCHLAUFEN SIE EINE BAUGRUPPE UND FRIEREN SIE JEDES TEIL IN DER BAUGRUPPE EIN. ' FUNCTION: FREEZE_ALL ' IN: NONE ' OUT: ALLE TEILE==FROZEN? ' Dim swdoc As SldWorks.ModelDoc2 Dim swAllDocs As EnumDocuments2 Dim FirstDoc As SldWorks.ModelDoc2 Dim boolstatus As Boolean Dim NumDocsReturned As Long Dim DocCount As Long Dim swapp As SldWorks.SldWorks Dim longstatus As Long Dim part As Object ' FREEZE_ALL ' WHILE (PARTS IN ASSEMBLY NOT FROZEN > 0 ) ' OPEN PART ' FREEZE PART ' SAVE PART ' CLOSE PART ' WEND Public Sub FREEZE_ALL() Set swapp = Application.SldWorks Set swAllDocs = swapp. EnumDocuments2 Set FirstDoc = swapp. ActiveDoc DocCount = 0 swAllDocs.Reset swAllDocs.Next 1, swdoc, NumDocsReturned ' Diese Schleife durchläuft alle Dokumente innerhalb einer Assembly, einschließlich Unterbaugruppen. Während NumDocsReturned <> 0 bDocWasVisible = swdoc ist. Das sichtbare Skript " Versteckte Teile verwenden " stürzte ab, wenn versucht wurde, eine Baugruppe einzufrieren. ' Überprüfen Sie die Datei, um sicherzustellen, dass es sich um eine "sldprt"-Datei handelt. Wenn (UCase(Right(swdoc. GetPathName, 6)) = UCase("sldprt")) Dann swapp. ActivateDoc2 swdoc. GetPathName, True, longstatus 'Öffnen und aktivieren Sie den Teil boolstatus = swdoc. FeatureManager.EditFreeze(swMoveFreezeBarTo_e.swMoveFreezeBarToEnd, "", True) ' verschieben die Fixierungsleiste an das Ende swdoc. SaveAs (swdoc. GetPathName) ' speichert die Änderung swapp. CloseDoc (swdoc. GetTitle()) ' schließen Sie den Teil End If swAllDocs.Next 1, swdoc, NumDocsReturned ' Gehe zum nächsten Teil DocCount = DocCount + 1 ' Zählen Sie alle Teile innerhalb der Baugruppe, einschließlich der Unterbaugruppen. Wend End U-Boot

Hallo

Meiner bescheidenen Meinung nach sollten Sie überhaupt nichts starten, ohne zuerst die Funktionsweise dieses Makros zu lesen und zu analysieren, das nicht sehr gut, aber geradezu gut funktioniert ...

Die Funktion "EnumDocuments2" ist eine High-Level-Funktion im Sldworks-Namensraum, sie ermöglicht es Ihnen, alle in Solidworks geöffneten Dokumente zu kennen und nicht nur in der Baugruppe, von der Sie glauben, dass Sie sie verarbeiten...

Herzliche Grüße

1 „Gefällt mir“

Hallo

Das ist ein Geschenk.

Möge die Macht mit euch sein.

 


freeze.zip
3 „Gefällt mir“

@OBI WAN , das scheint mir viel kohärenter zu sein ...

 

1 „Gefällt mir“

An der Spitze OBIWAN! Vielen Dank an alle für Ihre Antworten.

1 „Gefällt mir“