Eksportowanie zestawienia komponentów do programu Excel za pomocą makra VBA

Cze wszystkim.

Mam program VBA do eksportowania zestawienia komponentów w arkuszu .xls

Wszystko idzie dobrze, z wyjątkiem jednej opcji, której nie mogę zmienić.

Chciałbym, aby program wybrał aktualną konfigurację.

Obecnie poszukuje konfiguracji o nazwie "Default"

Konfiguracja = "Domyślnie"

Jesli ktos zna odpowiedz :)

 

****************************

Wstawianie tabeli BOM i wyodrębnianie danych (VBA)
W tym przykładzie pokazano, jak wstawić tabelę BOM i wyodrębnić z niej dane.

'-------------------------------------------------------
' Warunki wstępne:
' 1. Sprawdzić, czy określony dokument rysunku ma zostać otwarty
' istnieje.
' 2. Otwórz okno bezpośrednie.
'
' Warunki końcowe:
' 1. Otwiera określony dokument rysunku.
' 2. Wybiera widok rysunku.
' 3. Wstawia tabelę zestawienia komponentów w punkcie, w którym rysunek
' został wybrany.
' 4. Sprawdź rysunek i okno bezpośrednie.
'
' UWAGA: Ponieważ rysunek jest używany gdzie indziej, nie należy
' Zapisz zmiany.
'-------------------------------------------------------

Opcja jawna

Sub main()

Dim xlApp As Excel.Application
Ustaw xlApp = Nowy Excel.Aplikacja
Dim wbk As Excel.Workbook
Dim sht As Excel.Arkusz roboczy

Z xlApp
. Widoczne = Prawda
Ustaw wbk = . Skoroszyty.Dodaj
Ustaw sht = wbk. Arkusz ActiveSheet
Zakończ się na

Dim swApp jako SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim swModelDocExt As SldWorks.ModelDocExtension
Dim swBOMAnnotation As SldWorks.BomTableAnnotation
Dim swBOMFeature As SldWorks.BomFeature
Dim boolstatus As Boolean
Dim BomType tak długo, jak długo
Przyciemnij konfigurację jako ciąg
Dim TemplateName As Ciąg

Ustaw swApp = Application.SldWorks
Ustaw swModel = swApp.ActiveDoc
Ustaw swModelDocExt = swModel.Extension

TemplateName = "M:\DATABASE\SZABLONY\05-Model nomenklatury\GP_ASM_Nomenclature BOS.sldbomtbt"
BomType = swBomType_Indented
Konfiguracja = "Domyślnie"
Ustaw swBOMAnnotation = swModelDocExt.InsertBomTable3(NazwaSzablonu, 0, 0, TypFormularza, Konfiguracja, Fałsz, swNumberingType_Detailed, Prawda)
Ustaw swBOMFeature = swBOMAnnotation.BomFeature

swModel.ForceRebuild3 Prawda

Dim NumCol tak długo
Dim NumRow tak długo
Dim I tak długo
Słońce J Tak długo

LiczbaKolumn = swBOMAnnotation.ColumnCount
NumRow = swBOMAnnotation.RowCount

Dla I = 0 do NumRow
Dla J = 0 TB NumCol
Arkuszy. Komórki(I + 1, J + 1). Wartość = swBOMAnnotation.Text(I, J)
Następny J
Dalej I

boolstatus = swModelDocExt.SelectByID2(swBOMFeature.GetFeature.Description, "BOMFEATURE", 0, 0, 0, Prawda, 0, Nic, 0)
swModel.EditDelete

swModel.ForceRebuild3 Prawda

Przyciemnij konfigurację jako SldWorks.Configuration
Dim cusPropMgr As SldWorks.CustomPropertyManager
Dim lRetVal tak długo
Dim ValOut As String
Dim ResolvedValOut As String
Dim wasResolved As Boolean
Dim nNbrProps tak długo
Dim vPropNames jako wariant
Dim vPropTypes jako wariant
Dim vPropValues jako wariant
Dim rozwiązany jako wariant
Dim custPropType As Long
Dim K tak długo
Dim NameProperty As String

Ustaw config = swModel.GetActiveConfiguration
Ustaw cusPropMgr = config. CustomPropertyManager

nNbrProps = cusPropMgr.Count
vPropNames = cusPropMgr.GetNames
Dla K = 0 do nNbrProps - 1
cusPropMgr.Get2 vPropNames(K), ValOut, ResolvedValOut
custPropType = cusPropMgr.GetType2(vPropNames(K))
Jeśli vPropNames(K) = "RYSOWNIK" Następnie
PropertyName = ResolvedValOut
Zakończ jeżeli:
Następny k

Przyciemnij ścieżkę jako ciąg
path = "C:\temp\BOS.xlsx"

Z xlApp
WBK. Zapisz jako ścieżkę
WBK. Zamykać
. Kończyć
Zakończ się na

Koniec subwoofera


wstaw-bom-asm_-_03.swp

 Witaj dlebrun_1,

Oczywiście Twój kod składa się z dwóch dużych bloków.

Pierwsza z nich (wiersze od 22 do 53) tworzy nomenklaturę dla danej konfiguracji; w obszarze Excel właściwym. Drugi (wiersze od 55 do 100) dostaje nazwisko rysownika w konfiguracji aktywnej (ale nic z nim nie robi, co jest osobliwe).

Pierwszy blok, w przeciwieństwie do drugiego, nie korzysta z aktywnej konfiguracji, ale z konfiguracji o nazwie "Default". To jest wiersz 49: Konfiguracja = "Domyślnie". Wtedy lepiej jest zdefiniować zmienną "Configuration", która zawiera nazwę konfiguracji, wywołując obiekt konfiguracji. Następnie sugeruję, aby zastąpić tę linię, biorąc przykład następującej metody (link do strony pomocy Solidworks 2019):

Sub essai_8946585465656()
    
    Dim swApp As SldWorks.SldWorks
    Dim swModel As SldWorks.ModelDoc2
    Dim Configuration As String
    
    Set swApp = Application.SldWorks
    Set swModel = swApp.ActiveDoc
    
    Configuration = swApp.GetActiveConfigurationName(swModel.GetPathName)
    MsgBox Configuration
    
End Sub

 

1 polubienie

Witam

"Drugi (wiersze od 55 do 100) dostaje nazwisko rysownika w konfiguracji aktywnej (ale nic z nim nie robi, co jest osobliwe)": i tak, to jest piękne!! Rozpoznaję w tym kodzie część makra, którą stworzyłem w odpowiedzi na konkretne żądanie, ale która została oczywiście wyrwana z kontekstu i przerobiona przez kogoś, kto tak naprawdę nie rozumiał, co robi. Aby sprostać obecnej potrzebie, możliwe jest usunięcie dużej liczby wierszy i rzeczywiście wystarczy trzymać się aktywnej konfiguracji za pomocą funkcji "GetActiveConfigurationName", zgodnie z sugestią mgauroy.

Pozdrowienia

1 polubienie

Mgauroy powiedział: 

Dziękuję za pomoc. Zastosowałem się do twojej rady, teraz wszystko działa.

D.Roger

Dostałem ten program z Forum i szybko go zmodyfikowałem, nie usuwając go całkowicie. Niestety, nie jestem zbyt dobry w VBA jak zauważyliście ;) 

Oto wynik po modyfikacji:

Opcja jawna

Sub main()

Dim xlApp As Excel.Application
Ustaw xlApp = Nowy Excel.Aplikacja
Dim wbk As Excel.Workbook
Dim sht As Excel.Arkusz roboczy

Z xlApp
    . Widoczne = Prawda
    Ustaw wbk = . Skoroszyty.Dodaj
    Ustaw sht = wbk. Arkusz ActiveSheet
Zakończ się na

Dim swApp                   jako SldWorks.SldWorks
Dim swModel                 As SldWorks.ModelDoc2
Dim swModelDocExt           As SldWorks.ModelDocExtension
Dim swBOMAnnotation         As SldWorks.BomTableAnnotation
Dim swBOMFeature            As SldWorks.BomFeature
Dim boolstatus              As Boolean
Dim BomType                 tak długo, jak długo
Przyciemnij konfigurację           jako ciąg
Dim TemplateName            As Ciąg

Ustaw swApp = Application.SldWorks
Ustaw swModel = swApp.ActiveDoc
Ustaw swModelDocExt = swModel.Extension

TemplateName = "M:\DATABASE\SZABLONY\05-Model nomenklatury\GP_ASM_Nomenclature BOS.sldbomtbt"
BomType = swBomType_Indented
Konfiguracja = swApp.GetActiveConfigurationName(swModel.GetPathName)
Konfiguracja MsgBox
Ustaw swBOMAnnotation = swModelDocExt.InsertBomTable3(NazwaSzablonu, 0, 0, TypFormularza, Konfiguracja, Fałsz, swNumberingType_Detailed, Prawda)
Ustaw swBOMFeature = swBOMAnnotation.BomFeature

swModel.ForceRebuild3 Prawda

Dim NumCol tak długo
Dim NumRow tak długo
Dim I tak długo
Słońce J Tak długo

LiczbaKolumn = swBOMAnnotation.ColumnCount
NumRow = swBOMAnnotation.RowCount

Dla I = 0 do NumRow
    Dla J = 0 TB NumCol
        Arkuszy. Komórki(I + 1, J + 1). Wartość = swBOMAnnotation.Text(I, J)
    Następny J
Dalej I

boolstatus = swModelDocExt.SelectByID2(swBOMFeature.GetFeature.Description, "BOMFEATURE", 0, 0, 0, Prawda, 0, Nic, 0)
swModel.EditDelete

Przyciemnij ścieżkę jako ciąg
path = "C:\temp\BOS.xlsx"

Z xlApp
    WBK. Zapisz jako ścieżkę
    WBK. Zamykać
    . Kończyć
Zakończ się na

Koniec subwoofera

1 polubienie

Witam

Ja też byłbym zainteresowany odkryciem możliwości tego makra, ale utknąłem z 1 linijki: "type defined not defined".

To makro można uruchomić z SolidWorks, a nie z Excel 365.

Dziękuję za opinię, miłego dnia


pb_macro.png

Otwórz makro za pomocą edytora i sprawdź, czy dodałeś odwołanie do programu Microsoft Excel w menu Narzędzia Odwołania:

 

A także, ogólnie rzecz biorąc, lepiej jest otworzyć nowy temat za pomocą linku, niż wykopywać stary

2 polubienia

Dziękuję bardzo, to działa! Będę mógł zobaczyć, co można z tym zrobić w SW lub Excelu.

Wydawało mi się, że moje pytanie dotyczy ciągłości tematu, dlatego też nie otworzyłem nowego tematu jako takiego.

Jeszcze raz dziękuję

1 polubienie

Witam, wypróbowałem makro, ale otrzymuję błędy.

Jak wprowadzić to makro w solidworks, czy są jakieś zmiany do wprowadzenia,

Dziękuję za pomoc

Witam

Jakie? zrzut ekranu wiadomości nie byłby zły ...

Zdecydowaną zmianą  , którą należy wprowadzić, jest zmiana ścieżki szablonu BOM (TemplateName)

Pozdrowienia

2 polubienia

Witam wszystkich, przyjadę 2/3 lata później, wiem :grin:
Jestem prawie w tej samej sytuacji, więc te pytania i odpowiedzi dobrze mi służyły!

Małą osobliwością mojego problemu jest to, że muszę również wyeksportować wiele niestandardowych właściwości, takich jak nazwisko inżyniera, numer części lub numer planu...
Jeśli dobrze zrozumiałem to zależy od szablonu o nazwie, więc jak zmodyfikować taki szablon? A może jest na to inny sposób?

Z góry dziękuję

Program VBA wywołuje plik szablonu zestawienia komponentów SolidWorks. Dostosuj ten szablon, dodając informacje, które chcesz do niego dodać.

2 polubienia

Działa dzięki, ale problem polega na tym, że nie wiem, jak zmodyfikować taki plik (.sldbomtbt). Czy wiedziałbyś, jak to zrobić?

Witam
Po prostu edytuj tabelę, dodając żądane kolumny, a następnie kliknij wyświetlony krzyżyk, aby przenieść tabelę, a następnie wybierz opcję Zapisz jako.
Domyślnie zostanie on zapisany jako szablon zestawienia komponentów.

2 polubienia

Bardzo dziękuję, wszystko działa tak, jak chciałem!

Witam

Jeśli chodzi o Twoją główną potrzebę eksportowania zestawień materiałowych do programu Excel, opracowaliśmy narzędzie zintegrowane z SOLIDWORKS, które umożliwia utworzenie zestawienia komponentów z zespołu lub folderu i użycie właściwości jako filtra ekstrakcji, wybranie poziomu ekstrakcji podzespołów, połączenie kilku właściwości w kolumnie.

Możliwe jest również dostosowanie eksportu w formatach tekstowych, Excel, tabelarycznych SOLIDWORKS, PDF lub XML.

Tym narzędziem jest SmartBom: SmartBom

Pozdrowienia

Witam

Próbowałem tego makra, aby zobaczyć.

Makro działa, jeśli uruchomię je z zespołu, ale nie z rysunku.
Może to być jego normalne funkcjonowanie.

Możliwe byłoby posiadanie wariantu tego do pobierania zestawienia komponentów, które znajduje się na rysunku (dodaję dane w kolumnie mojego zestawienia komponentów i jest to bardziej praktyczne na MEP niż w złożeniu)??

Czy możliwe byłoby również utworzenie pliku Excel z istniejącego szablonu i zapisanie go pod inną nazwą? (aby mieć inne istniejące wcześniej arkusze w Excelu i ewentualnie umieścić tam również inne makra)

Z góry dziękuję

Witam
Myślę, że wszystko jest do zrobienia, wystarczy skompilować kod SW i Excel.
Myślę, że już odpowiedziałem na tego typu pytanie na inny temat, musiałbym zrobić trochę badań.