API/VBA zum Abrufen benutzerdefinierter Eigenschaften einer Komponente einer Baugruppe

Hallo ihr alle

Ich arbeite derzeit an einem Projekt zur Automatisierung einiger Ordner und möchte einige Funktionen in mein vorhandenes Makro integrieren, das eine Stückliste in einer Baugruppe im TXT-Format einfügt und exportiert.

Ich danke allen, die sich die Zeit nehmen, mich zu lesen und mir ein paar Momente zu geben, um mich selbst zu befreien. :)

Der Export- und Speicherteil der Stückliste läuft gut, aber ich habe ein Problem, wenn ich versuche, die Werte der Eigenschaften einer der Komponenten (die einzige, die diese Eigenschaften hat) abzurufen: CLIENT, LOCAL, CPLT LOCAL, DEAL, DRAFTSMAN, QTE ASS), bevor ich sie unter demselben Namen = Wert in der Baugruppe kopiere.

Ich hatte an etwas herumgebastelt, indem ich die exportierte Excel-Tabelle basierend auf folgenden Kriterien "manipuliert" habe:

AFFAIRE = Range("BG2:BG1000").Find("*", , , , xlByColumns).Value            'Cherche la première valeur non vide
On Error Resume Next                                            

 

Das funktioniert aber nur, wenn die Immobilie tatsächlich existiert. Kurz gesagt, ich möchte eine präzisere und sicherere Lösung finden.

Ich habe viele Codeteile und/oder Lösungen gesucht und ausprobiert, die auf der Website oder anderswo gefunden wurden, aber ich weiß wirklich nicht genug über APIs und VBA-Code, um ihn an meine Bedürfnisse anzupassen.

Ich habe jedoch einige interessante Funktionen identifiziert, von denen hier unten ein Beispiel ist, um einfach die CODE-Eigenschaften in einer MsgBox zu lesen. (Das wäre schon ein guter Schritt:) funktioniert aber leider nicht)  

 Dim swSelMgr                As SldWorks.SelectionMgr
    Dim swSelComp               As Variant
    Dim swSelModel              As SldWorks.ModelDoc2
    Dim swCustPropMgr           As CustomPropertyManager
    Dim swEnt                   As SldWorks.Entity
    Dim val                     As String
    Dim valout                  As String
 
   
    Set swSelComp = swBOMAnnotation.GetComponents2(2, Configuration)
    
    Set swCustPropMgr = swSelComp.Extension.CustomPropertyManager("")
    
    swCustPropMgr.Get4 "CODE", False, val, valout 'Change property name here
    MsgBox "Value: " & val & "Evaluated value: " & valout

 

Die letzte Idee wäre daher, die Komponentenvariable abzurufen, sie in die Baugruppe und dann in jedes der Teile mit den Eigenschaften CODIFICATION ="X" zu kopieren

Haben Sie irgendwelche Ratschläge und offensichtliche Korrekturen, die Sie mir mitteilen möchten, um mich zu entsperren? Ich danke Ihnen im Voraus sehr gut. Zögern Sie nicht, mich nach weiteren Details zu fragen.

Ich hänge meine beiden Code-Stücke an, von denen eines wirklich grob ist und für meine Forschung / meinen Test verwendet wird... Die zweite ist die einfachste, die funktioniert, wenn die Eigenschaften eingegeben werden.

PS: Ich sollte darauf hinweisen, dass ich die myCADtools nicht zur Verfügung habe.

Vielen Dank an alle.

 

Michael                              


test_export_txt_nomenclature.swp

Und hier ist der zweite "einfachere" Codeausschnitt, der funktioniert, wenn Eigenschaften eingegeben werden.:)


enregistrement_nomenclature.swp

Hallo

Beginnen Sie damit, Ihr "enregistrement_nomenclature"-Makro zu ändern, indem Sie die Zeile "On Error Resume Next" an den Anfang des Codes setzen (direkt unter Ihrer Zeile "Sub main()") und Sie müssen nicht mehrere einfügen, diese Zeile ist ein Fehlerbehandlungsbefehl, kein Link mit einer Schleife, Schauen Sie es sich hier an .

Herzliche Grüße

1 „Gefällt mir“

Zu Punkt 2: Um die Eigenschaften der Teile ändern zu können, müssen Sie tatsächlich die Funktion GetComponents2 verwenden und dann für jede Komponente die Funktion GetModelDoc2 verwenden, um an diesen Eigenschaften arbeiten zu können.

Herzliche Grüße

1 „Gefällt mir“

Hallo

Ich bin bei meinen Recherchen in der Tat auf viele Ihrer Antworten gestoßen, ich habe auf Ihre Intervention gerechnet. :)

Und vielen Dank, ich habe gerade meine Funktion "On Error Resume Next" an den Anfang verschoben, und dann auch noch hinzufügen:

If Cells(I + 1, J + 1) = " " Then
        Cells(I + 1, J + 1).ClearContents
        End If

  da nach dem Export der Eigenschaften die Zellen nicht leer sind, sondern alle ein Leerzeichen (" ") enthalten. Ich vermute, es hat den Rest meines Makros gestört... Insbesondere die:

AFFAIRE = Range("BG2:BG1000").Find("*", , , , xlByColumns).Value            'Cherche la première valeur non vide

 

Auf der anderen Seite würde ich immer noch gerne einen Weg finden, die benutzerdefinierten Eigenschaften der Komponenten direkt über    GetComponents2 und dann  GetModelDoc2 zu extrahieren, aber dafür muss ich meine Recherche fortsetzen und wahrscheinlich um ein wenig Hilfe bitten ;)

Vielen Dank, dass du mich auf jeden Fall von diesem ersten Fall befreit hast. :)

 

Sehr guter Tagesausklang für Sie,

 

Herzliche Grüße

 

Mickael