Makro VBA na rysunku - jak uzyskać nazwę konfiguracji części referencyjnej

Witam

Chcę pobrać nazwę konfiguracji części używanej jako odniesienie na rysunku.

Oto fragment kodu, który obecnie posiadam:
 

Aktywujemy dokument roboczy
Ustaw swApp = Application.SldWorks
Ustaw część = swApp.ActiveDoc
Set FileSys = CreateObject("Scripting.FileSystemObject")

Pobiera pełną ścieżkę do bieżącego dokumentu, łącznie z nazwą pliku
PathName = Nazwa_Części.NazwaŚcieżki_Użytkownika
Pobiera ścieżkę do bieżącego dokumentu bez nazwy pliku:
FilePath = Left(NazwaŚcieżki, InStrRev(NazwaŚcieżki, "\"))
Pobiera nazwę pliku:
NazwaPliku = Right(NazwaŚcieżki, Len(NazwaŚcieżki) - InStrRev(NazwaŚcieżki, "\"))
Typedoc = Prawo(nazwaPliku, 3)

Wybierz typ sprawy
Pole "drw", "DRW"
    
Ustaw swview = Part.GetFirstView
Ustaw swview = swview. GetNextView 'włącza/pobiera pierwszy widok dla właściwości niestandardowych
Ustaw swRefDoc = swview. ReferencedDocument ' Mamy teraz swRefDoc 3D rysunku
               
Pobieramy właściwości konfiguracji części referencyjnej lub zespołu
configNames = swRefDoc.GetConfigurationNames
vConfigNameArr = swRefDoc.GetConfigurationNames

Dla każdej nazwy vConfigName w vConfigNameArr
Debug.Print vConfigName
vCustInfoNameArr = swRefDoc.GetCustomInfoNames2(vConfigName)

 

z wyjątkiem tego, że w "configNames" otrzymuję wszystkie konfiguracje części, podczas gdy chciałbym tylko konfigurację części użytej na rysunku, a następnie będę mógł usunąć moją pętlę For Each.

Dziękuję za pomoc, jestem pewien, że to dla ciebie fałszywe.

a w przypadku części lub zespołu szukam, aby wartość określonej właściwości (np. Engineering PartNumber) była obecna tylko w "właściwościach konfiguracyjnych" dla konfiguracji aktywnej części.


prop.png

Dla aktywnej konfiguracji:

https://help.solidworks.com/2020/english/api/sldworksapi/Get_List_Of_Configurations_Example_VB.htm?verRedirect=1

Dla właściwości niestandardowej związanej z konfiguracją:

https://help.solidworks.com/2020/English/api/sldworksapi/Get_Custom_Properties_for_Configuration_Example_VB.htm?verRedirect=1

Witam;

To całkiem proste;

    Dim swConfigMgr                 jako SldWorks.ConfigurationManager
    Dim swConfig                    jako SldWorks.Configuration
....
Set swConfig = swConfigMgr.ActiveConfiguration ' konfiguracja Aktywna
stnameConfig = swConfig.Name 'Aktywna nazwa konfiguracji

Pozdrawiam.

1 polubienie

Witaj Maclane,

To jest to, co włożyłem, ale to nie działa.

No_article = Part.GetCustomInfoValue("Domyślnie", "Numer części inżynierskiej") --> to działa

No_article = Part.GetCustomInfoValue(swConfig, "Numer części inżynierskiej") --> to nie działa (Błąd wykonania 13, Niezgodność typu)

Dziękujemy za Twoją opinię

Witam;

Spróbuj z:

Dim swCustProp As Variant
....
 Ustaw swCustProp = swModel.Extension.CustomPropertyManager(swConfig)
No_article = swCustProp.Get4("Numer części inżynierskiej", False, val, valout)
No_article = valout 'z dim No_article jako ciąg

Pozdrowienia

1 polubienie

Witaj Pierre,

W ostatnim wierszu poprzedniej wiadomości zmienna swConfig wskazuje na obiekt iConfiguration (w tym przypadku swconfig jest bieżącą konfiguracją), a nie na ciąg zawierający jego nazwę, stąd błąd 13.
Prawdopodobnie jest to swConfig.Name jest ciąg znaków, którego należy użyć (nazywany również stnameConfig przez Maclane'a).

Pozdrowienia

1 polubienie

Dzięki wam obojgu, Maclane i m.blt.
Wiedziałem, że to coś fałszywego... ale nie jest to dla mnie łatwe.