Mit einem Makro von einem MEP möchte ich die Eigenschaft des referenzierten PRT oder ASM wiederherstellen

Ich habe ein Makro erstellt, um ein PDF und eine DWG des geöffneten MEP in SW zu generieren.

Ich nutze die Gelegenheit, um die generierte Datei mit Name, Nummer und Hinweis umzubenennen.

Für Eigenschaften im MEP verwende ich Revision = swModel.CustomInfo("Revision"), aber welche Syntax sollte ich verwenden, um eine Eigenschaft aus dem PRT oder ASM abzurufen, auf die im MEP verwiesen wird.

Das Makro ermöglicht es mir, die Dateien einzeln zu generieren oder es mit dem Integrationsdienstprogramm aufzurufen, um einen Stapel von Dateien zu verarbeiten

 

Vielen Dank im Voraus für Ihre Antworten

Hallo

Ich bin mir nicht sicher, ob Sie dies direkt aus dem MEP tun können, aber Sie können den Namen des referenzierten 3D-Modells mit der Funktion "GetReferencedModelName()" finden, dieses 3D-Modell öffnen, die Eigenschaften notieren, an denen Sie interessiert sind, das 3D-Modell schließen und dann Ihre Verarbeitung auf dem MEP fortsetzen. All dies natürlich per Makro.

Herzliche Grüße

2 „Gefällt mir“

Ansonsten ein anderer Vorschlag, ich sehe, dass Sie die Mycad-Werkzeuge haben, und die Integration sollte es Ihnen ermöglichen, all diese Funktionen auszuführen, ohne ein Makro erstellen zu müssen.

1 „Gefällt mir“

Vielen Dank für Ihre Antworten.

Ich beherrsche Makros nicht genug, um mit dem Vorschlag von d.roger zu beginnen.

Mit Integration habe ich nicht gesehen, wie man PDF oder DWG generiert. Mit Batch Converter funktioniert es, und ich kann die Informationen des Teils abrufen!

Aber es ist ein bisschen umständlich: Ich muss Integration und dann Batch Converter starten und jedes Mal die Liste der Dateien (es ist nicht möglich, eine Liste von Dateien zu speichern) in jedes Dienstprogramm ziehen

 

Vielen Dank an euch beide und einen schönen Tag

Hallo

Grob:

Dim sModelName                  As String
Dim ValOut                      As String
Dim ResolvedValOut              As String
Dim sConfigName                 As String
Dim WasResolved                 As Boolean
Dim swModelDocExt               As ModelDocExtension
Dim swCustProp                  As CustomPropertyManager

Sub main()
    
Set swApp = CreateObject("SldWorks.Application")
Set swModel = swApp.ActiveDoc
If swModel Is Nothing Then
    MsgBox ("Pas de document ouvert")
    Else
        If swModel.GetType <> 3 Then
            MsgBox ("Il ne s'agît pas d'une mise en plan")
        Else
            Set swDraw = swModel
                vSheetName = swDraw.GetSheetNames
                vSheetNameArr = swDraw.GetSheetNames

                For Each vSheetName In vSheetNameArr
        
                    bRet = swDraw.ActivateSheet(vSheetName): Debug.Assert bRet
                    Set swView = swDraw.GetFirstView 'Sélectionne le fond de plan
                    Set swView = swView.GetNextView  'Passe à la vue suivante pour exclure le fond de plan
                    'Debug.Print swView.GetName2
                
                    While Not swView Is Nothing
           
                    ' Determine if this is a view of a part or assembly

                        sModelName = swView.GetReferencedModelName

                        sModelName = LCase(sModelName)
                        
                        sConfigName = swView.ReferencedConfiguration
        
                        FileConnu = False
        
                        If InStr(sModelName, "sldprt") > 0 Then
                            nDocType = swDocPART
                        ElseIf InStr(sModelName, "slasm") > 0 Then
                            nDocType = swDocASSEMBLY
                        Else
                            nDocType = swDocNONE
                            Exit Sub
                        End If
                       
                       If nDocType = 1 Or nDocType = 2 Then
                            Call Export
                       End If
        
                        Set swView = swView.GetNextView
    Wend

Next vSheetName
End If
End If
End Sub

Sub Export()
Set swModel = swApp.OpenDoc6(sModelName, nDocType, swOpenDocOptions_Silent, "", nErrors, nWarnings)
Set swModelDocExt = swModel.Extension
Set swCustProp = swModelDocExt.CustomPropertyManager(sConfigName)
boolstatus = swCustProp.Get5("Revision", False, ValOut, ResolvedValOut, WasResolved)
End Sub

 

Nach dem boolstatus müssen Sie den ValOut- oder ResolvedValout-Wert (je nach zurückgegebenem Feld entspricht der zweite Wert dem in der Spalte "Ausgewerteter Wert" eingegebenen Wert) in einer Zeichenfolgenvariablen abrufen und dann mit dem Registrierungsnamen verketten.

Ich habe nicht alle Variablen eingefügt, Sie müssen nur das hinzufügen, was Ihnen fehlt, um Ihr Makro zu erweitern.

1 „Gefällt mir“

Super!

Ich muss etwas Zeit finden, um zu versuchen, es zu verfeinern...

Allerdings verstehe ich diesen Teil des Codes nicht wirklich:

vSheetName = swDraw.GetSheetNames
vSheetNameArr = swDraw.GetSheetNames
                Für jeden vSheetName in vSheetNameArr
..

Weiter vSheetName

Zählt diese Schleife die verschiedenen Ansichten des Zeichnungsblattes oder der Zeichnungsblätter? (Sheetname erinnert mich an den Namen des Blattes (wie in Excel), aber es wäre sinnvoll, stattdessen die Zeichnungsansichten zu "zählen")

 

Hallo

Für jeden vSheetName In vSheetNameArr: Alle Blätter in der Zeichnung.

While Not swView is nothing: Alle Ansichten im Blatt, die analysiert werden.

Also alle Ansichten aller Blätter....

Herzliche Grüße

Vielen Dank

Ja, auf der anderen Seite habe ich eine Behandlung, damit ich nicht umsonst in derselben Datei loope.