API / VBA do pobierania niestandardowych właściwości komponentu zestawu

Cze wszystkim

Obecnie pracuję nad projektem automatyzacji niektórych folderów i chciałbym zintegrować niektóre funkcje z moim istniejącym makrem, które wstawia i eksportuje zestawienie komponentów w zestawieniu w formacie TXT.

Dziękuję tym, którzy poświęcili czas, aby mnie przeczytać i dać mi kilka chwil na odblokowanie się. :)

Eksport i zapis części BOM idzie dobrze, ale mam problem, gdy próbuję pobrać wartości właściwości jednego z komponentów (jedynego, który ma te właściwości): CLIENT, LOCAL, CPLT LOCAL, DEAL, DRAFTSMAN, QTE ASS) przed skopiowaniem ich pod tą samą nazwą = wartość w złożeniu.

Majstrowałem przy czymś, "manipulując" wyeksportowaną tabelą Excela na podstawie:

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

 

Ale to działa tylko wtedy, gdy właściwość istnieje. Krótko mówiąc, chciałbym znaleźć bardziej precyzyjne i bezpieczne rozwiązanie.

Przeszukałem i wypróbowałem wiele fragmentów kodu i/lub rozwiązań znalezionych na stronie lub w innym miejscu, ale naprawdę nie wiem wystarczająco dużo o interfejsach API i kodzie VBA, aby dostosować go do moich potrzeb.

Zidentyfikowałem jednak kilka interesujących funkcji, z których oto przykład poniżej, aby po prostu odczytać właściwości CODE w MsgBox. (to już byłby dobry krok:) ale niestety nie działa)  

 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

 

Ostatecznym pomysłem byłoby zatem pobranie zmiennej komponentu, skopiowanie jej do zespołu, a następnie do każdej z części o właściwościach CODIFICATION ="X"

Czy masz jakieś rady i oczywiste poprawki, którymi chciałbyś się ze mną podzielić, aby mnie odblokować? Z góry bardzo dziękuję. Nie wahaj się zapytać mnie o więcej szczegółów.

Załączam moje dwa kawałki kodu, z których jeden jest naprawdę szorstki i używany do moich badań / testów... Drugi jest najprostszy, który działa po wprowadzeniu właściwości.

PS: Powinienem zaznaczyć, że nie mam dostępnych narzędzi myCADtools .

Dziękuję wam wszystkim.

 

Michael                              


test_export_txt_nomenclature.swp

A oto drugi "prostszy" fragment kodu, który działa po wprowadzeniu właściwości.:)


enregistrement_nomenclature.swp

Witam

zacznij od modyfikacji makra "enregistrement_nomenclature", umieszczając wiersz "On Error Resume Next" na początku kodu (tuż pod wierszem "Sub main()" i nie musisz umieszczać kilku, ten wiersz jest poleceniem obsługi błędów, bez powiązania z żadną pętlą, spójrz na to tutaj .

Pozdrowienia

1 polubienie

Dla punktu 2: aby móc modyfikować właściwości części, musisz faktycznie użyć funkcji GetComponents2 , a następnie dla każdego komponentu użyć funkcji GetModelDoc2 , aby móc pracować nad tymi właściwościami.

Pozdrowienia

1 polubienie

Witam

Rzeczywiście, podczas moich badań natknąłem się na wiele Twoich odpowiedzi, liczyłem na Twoją interwencję. :)

I bardzo dziękuję, właśnie przeniosłem moją funkcję "On Error Resume Next" na początek, a następnie dodałem również:

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

  Ponieważ po eksporcie właściwości komórki nie są puste, ale wszystkie zawierają spację (" "). Domyślam się, że zakłóciło to resztę mojego makro... W szczególności:

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

 

Z drugiej strony, nadal chciałbym znaleźć sposób na wyodrębnienie niestandardowych właściwości komponentów bezpośrednio przez    GetComponents2 , a następnie  GetModelDoc2 , ale w tym celu będę musiał kontynuować moje badania i prawdopodobnie poproszę o małą pomoc ;)

W każdym razie tysiąc razy dziękuję za odblokowanie mnie od tej pierwszej sprawy. :)

 

Bardzo dobry koniec dnia dla Ciebie,

 

Pozdrowienia

 

Mickael