Właściwość niestandardowa

Witam.

Chcę zmodyfikować jedną lub dwie niestandardowe właściwości części (zawartej w moim zespole bez jej otwierania)  

Celem byłoby  kontrolowanie tego wszystkiego z makra extel. 

Znalazłem tylko ten, który działa poprawnie: Part.CustomInfo("No_article) = 200020

Ale musisz otworzyć pokój :/ .

Czy mógłbyś mi pomóc 

Witam

Można edytować dostosowane właściwości dokumentu SolidWorks bez otwierania go, korzystając z interfejsów API Menedżera dokumentów. Są to interfejsy API używane przez aplikacje, takie jak MyCadTools.

Osobiście stworzyłem aplikację, która łączy i modyfikuje właściwości komponentów zespołu w celu zarządzania zestawieniami materiałowymi i zapewnienia powiązania z naszym ERP.

Aby to zrobić, musisz złożyć wniosek o licencję w swoim obszarze klienta.

Oto kilka przykładów.

Dobry kod...

2 polubienia

Witam

Czego nie chcesz otwierać w SW? Twoja część czy Twój zespół?

spójrz na ICI, popyt wygląda trochę (lub nawet dużo).

Pozdrowienia

1 polubienie

Dziękuję za odpowiedź, nie chcę otwierać moich części, mój zespół byłby  aktywny.

I tak, D.Roger , staram się inspirować tą osobą, ale nadal mam pewne zmartwienia.

Dim swApp As Object

Przyciemnij część jako obiekt
Dim boolstatus As Boolean
Dim longstatus As Long, longwarnings As Long

Podpunkt Modif_art2()

'Ustaw swApp = _
'Aplikacja.SldWorks

'Ustaw część = swApp.ActiveDoc
Ustaw swApp = CreateObject("SldWorks.Application")
Ustaw swModelDoc = swApp.ActiveDoc

boolstatus = Part.Extension.GetModelDoc2("XXXXXD06-1@XXXXX_630S_chgt_D_bavette-1", "KOMPONENT", 0, 0, 0, Fałsz, 0, Nic, 0)
Part.CustomInfo("No_article") = 200


' działa w pokoju
'boolstatus = Part.AddCustomInfo3("", "No_article", 1, "")
'Part.CustomInfo("No_article") = 2000200
Koniec subwoofera
 

Ale oto mój problem w tej chwili.

Błąd wykonania 91 

Zmienna obiektu lub Blok z niezdefiniowaną zmienną

Witam

Tworzy się obiekt Solidworks: Ustaw swApp = CreateObject("SldWorks.Application")

Otrzymasz bieżący dokument: Set swModelDoc = swApp.ActiveDoc

Ale pomiędzy 2 musiałbyś otworzyć dokument w Solidworks, w przeciwnym razie próbujesz odzyskać obiekt, który nie istnieje, stąd komunikat "obiekt nie zdefiniowany", ponieważ domyślam się, że w trybie debugowania to w tym wierszu zawiesza się.

Pozdrowienia

1 polubienie

Mój zestaw byłby aktywny, zostałby wygenerowany, a następnie wywołałbym to okno dialogowe, więc wystarczyłoby tylko wykonać

Ustaw swModelDoc = swApp.ActiveDoc

ale zawsze mówi mi zmienny obiekt lub blok nie jest zdefiniowany :/

Przepraszam za moją małą wiedzę na tym poziomie^^

Udało mi się posunąć nieco dalej w tym temacie 

 

Dim swApp As Object

Przyciemnij część jako obiekt
Dim boolstatus As Boolean
Dim longstatus As Long, longwarnings As Long

Podpunkt Modif_art2()
Set swApp = CreateObject("SldWorks.application") '_
Ustaw część = swApp.ActiveDoc
'------------------------------------------------------------------------------------------------------------------------------------------------------------------------


'------------------------------------------------------------------------------------------------------------------------------------------------------------------------
swApp.ActivateDoc2 "xxxxx.SLDASM", Fałsz, longstatus
Ustaw część = swApp.ActiveDoc
boolstatus = Part.Extension.GetModelDoc2("XXXXXD06-1@XXXXX_630S_chgt_D_bavette-1", "KOMPONENT", 0, 0, 0, Fałsz, 0, Nic, 0)
Part.CustomInfo("No_article") = 2003700


Koniec subwoofera

 

Błąd wykonania 438 (na pogrubionej linii)

Właściwość lub metoda nieobsługiwana przez ten obiekt 

 

Tak, jest to normalne, ponieważ funkcja GetModelDoc2 jest funkcją należącą do obiektów Icomponent2 , podczas gdy w kodzie próbujesz wywołać ją za pośrednictwem obiektu IModelDoc2.

W tym samym czasie zadał Pan/Pani kolejne pytanie, które można znaleźć TUTAJ , ale wydaje się, że jest to to samo pytanie, na które z nich należy odpowiedzieć?

Przykład użycia funkcji GetModelDoc2 znajdziesz TUTAJ.

Pozdrowienia

1 polubienie

Dziękuję za odpowiedź, otworzyłem to pytanie, aby przeformułować moje pytanie, stwierdzam, że wyraziłem się źle, to na pewno nie jest zbyt przydatne, przepraszam.

Wtedy nie bardzo rozumiem, o co chodzi (1.-1)

Debug.Print "Selected Type =" & swSelMgr. GetSelectedObjectType3 (1, -1)

 

Zajrzyj TUTAJ w akapicie "Parametry" i nie wahaj się przeprowadzić badań (na temat każdej używanej funkcji) w pomocy dotyczącej interfejsów API Solidworks, są one bardzo dobrze udokumentowane...

Pozdrowienia

1 polubienie

Dim swApp As Object

Przyciemnij część jako obiekt
Dim BoolStatus As Boolean
Dim longstatus As Long, longwarnings As Long
Sun swSelMgr jako SldWorks.SelectionMgr
Dim swSelObj Jako obiekt
Dim swSelComp As SldWorks.Component2
 Dim swEnt jako SldWorks.Entity


Podpunkt Modif_art2()

 Ustaw swApp = CreateObject("SldWorks.Application")
    Ustaw swModel = swApp.ActiveDoc
    Ustaw swSelMgr = swModel.SelectionManager
    
Ustaw swSelComp = swSelMgr.GetSelectedObjectsComponent3(1, -1)

Ustaw swSelComp = swEnt. XXXXXD06(nazwa mojego utworu)

        Part.CustomInfo("No_article") = 20037
Koniec subwoofera

 

To blokuje w nazwie moich części, że zrobiłem złą manipulację?

Błąd wykonania "91"

Zmienna obiektu lub Blok z niezdefiniowaną zmienną

 

Funkcja Przyciemniania Jako funkcja

Dim boolstatus As Variant

Przyciemnij część jako obiekt

Dim longstatus As Long, longwarnings As Long

Podpunkt Modif_art2()


Ustaw swApp = CreateObject("SldWorks.Application")

Ustaw model = swApp.ActiveDoc

 

' Wybierz element o nazwie "Wyciągnięcie1"
Ustaw część = swApp.ActiveDoc
boolstatus = Part.Extension.SelectByID2("Szef.-Extru.1@XXXXXD06-1@XXXXX_0000_00_D_111", "BODYFEATURE", 0, 0, 0, Fałsz, 0, Nic, 0)

 

' Jeśli wybór się powiódł, oznacza to, że "Wyciągnięcie1" było

' zaznaczone i jest to "BODYFEATURE", a następnie pobierz tę funkcję; inaczej

' wskazują na awarię

Jeśli boolstatus = Prawda, to

    Sun SelMgr jako SelectionMgr

    Ustaw SelMgr = Model.SelectionManager

    Ustaw cechę = SelMgr.GetSelectedObject6(1, 0)
    
    
    
Ustaw swCustPropMgr = swCutlistItem.CustomPropertyManager("No_article")

Debug.Print "No_article"

Debug.Print "Liczba właściwości niestandardowych = 28 " + CStr(swCustPropMgr.Count("6"))

Debug.Print "No_article", "", "200", "Tekst"

 

'Names = swCustPropMgr.GetNames("2000")


Zakończ jeżeli:

Koniec Sub*

 

Próbowałem też tej metody i utknąłem na linii:

Debug.Print "Liczba właściwości niestandardowych = 28 " + CStr(swCustPropMgr.Count("6"))

z błędem "Wymagany element" 

Ref : http://help.solidworks.com/2012/English/api/sldworksapi/Get_Custom_Properties_for_Cut-list_Item_Example_VB.htm

w celu sprawdzenia, czy udało mi się uzyskać dostęp do własności mojego dzieła.

 

 

Witam

Przykro mi, że ci to mówię, ale nie mogę nawet przeczytać twojego kodu, ponieważ obiekty i funkcje są pomieszane bez uwzględnienia ich cech i funkcjonowania. Czy nie próbujesz dowiedzieć się więcej o makrach Solidworks, pomijając te kroki?

Pozdrowienia

2 polubienia

Jestem trochę zagubiony dla tego vba, naprawdę nie wiem, jak się do tego zabrać

Zanim zaczniemy myśleć o VBA Solidworks, myślę, że powinieneś już zainteresować się samym językiem programowania, aby zrozumieć, jak to działa, istnieje cała masa kursów, które mogą już pomóc zacząć, jak na przykład TUTAJ lub TUTAJ, tak, to dla Excela, ale to nie ma znaczenia, filozofia jest taka sama: programowanie obiektowe. Wtedy i tylko wtedy możesz zainteresować się specyficznymi dla Solidworks interfejsami API w pomocy online bezpośrednio tutaj.

Na początku zajmuje to trochę czasu i może wydawać się nieco nużące, ale to dopiero początek...

Pozdrowienia

2 polubienia

Okej, przydałoby mi się, postaram się ponownie zaproponować wersję po przestudiowaniu tego wszystkiego, dziękuję