Makro Eksport zestawienia materiałów do Excela

Cze wszystkim

Jestem początkującym specjalistą od makr, w BE używamy Solidworks i chcę zautomatyzować niektóre zadania. Obecnie eksportuję zestawienia materiałowe do Excela od momentu rysowania i integruję je z naszym ERP. Chciałbym, aby makro eksportowało nomenklaturę o tej samej nazwie co rysunek i w tym samym folderze.

Próbowałem przez Chatgpt niemożliwe.

Przeprowadziłem pewne badania, ale nie mogę znaleźć tego, czego szukam, czy ktoś ma makro podobne do mojego żądania w swoim przyborniku?

Sprawdź ten temat:

Lub:

A kończąc ten:

Edit: dzięki wyszukiwaniu na forum tematy są również możliwe do znalezienia i to bez potrzeby czatowania! :wink:

3 polubienia

Dziękuję za szybką odpowiedź, widziałem te tematy, ale pierwszy temat integruje nomenklaturę, eksportuje ją i usuwa. Chciałbym, aby makro wybrało nomenklaturę, która jest na rysunku i wyeksportowało ją do xlsx.

Witaj @Jérémy_Guillon ;
Powinieneś być bardziej precyzyjny w swoich żądaniach...

  • Wersja solidworks
  • Wersja programu Excel
  • nazwę lub arkuszy rysunków
  • Nazwa i rodzaj nomenklatur...
  • lokalizacja docelowa (dynamiczna czy statyczna?)…

(w razie wątpliwości poniższe makro eksportuje wszystkie zestawienia komponentów znalezione na rysunku do pliku *.xlsx ( C:\Temp\Nomenclature_MiseEnPlan.xlsx)

Sub ExportNomenclatureMiseEnPlan()
    Dim swApp As Object
    Dim swDraw As Object
    Dim swTable As Object
    Dim swSheet As Object
    Dim swView As Object
    Dim swTableAnnotation As Object
    Dim excelApp As Object
    Dim wb As Object
    Dim ws As Object
    Dim i As Long, j As Long
    Dim rowCount As Long, colCount As Long
    
    ' Initialiser SolidWorks
    Set swApp = GetObject(, "SldWorks.Application")
    Set swDraw = swApp.ActiveDoc
    
    If swDraw Is Nothing Then
        MsgBox "Aucune mise en plan active."
        Exit Sub
    End If
    
    ' Créer une instance Excel
    Set excelApp = CreateObject("Excel.Application")
    excelApp.Visible = True
    Set wb = excelApp.Workbooks.Add
    Set ws = wb.Sheets(1)
    
    ' Localiser la table BOM dans la mise en plan
    ' Supposons qu'il y ait une seule table BOM
    For Each swTableAnnotation In swDraw.GetTableAnnotations
        If swTableAnnotation.Type = 0 Then ' 0 pour BOM
            Set swTable = swTableAnnotation
            Exit For
        End If
    Next
    
    If swTable Is Nothing Then
        MsgBox "Aucune table de nomenclature trouvée."
        Exit Sub
    End If
    
    ' Récupérer le nombre de lignes et colonnes
    rowCount = swTable.RowCount
    colCount = swTable.ColumnCount
    
    ' Parcourir la table et exporter
    For i = 0 To rowCount - 1
        For j = 0 To colCount - 1
            ws.Cells(i + 1, j + 1).Value = swTable.Text(i, j)
        Next j
    Next i
    
    ' Enregistrer le fichier Excel
    Dim savePath As String
    savePath = "C:\Temp\Nomenclature_MiseEnPlan.xlsx"
    wb.SaveAs savePath
    
    ' Nettoyer
    wb.Close
    excelApp.Quit
    MsgBox "Export terminé : " & savePath
End Sub

Uwaga osobista:
Nigdy nie nauczysz się programowania, jeśli zapytasz o to bezpośrednio sztuczną inteligencję. Należy pamiętać, że odczytanie kodu jest 10 razy trudniejsze niż jego napisanie.

1 polubienie

Witaj Maclane,

To prawda, że nie jestem zbyt przyzwyczajony do wchodzenia na fora.
Jesteśmy w SW 2023 SP5.0, dla programu Excel w wersji 16.0.
Zwykle arkusz nazywa się PLAN, a BOM nazywa się BOM1
Dla lokalizacji i nazwy pliku chciałbym mieć taką samą nazwę jak plik sw i jest on zapisany w folderze źródłowym rysunku.

Przetestowałem proponowane makro i mam debug na tym poziomie:

Dla każdej adnotacji swTableAnnotation w swDraw.GetTableAnnotations

Wiem, że to jest problem, kiedy przeprowadziłem kilka testów.

Rozumiem, że w przypadku sztucznej inteligencji chciałbym wiedzieć, jak kodować i się uczyć, ale jestem jedyną osobą, która chce automatyzować zadania w biurach za pomocą oprogramowania makr lub po prostu formuł Excela. (inni wolą pisać i powtarzać zadania i popełniać błędy) osoba, z którą zacząłem i która pokazała mi VBA, zniknęła, a ja jestem jedyną osobą w BE,... Staram się więc robić to sam, gdy mam trochę czasu. I przyznaję, że jest to łatwe, gdy tylko utkniesz na jakiejś formule lub innej... :wink:

To tyle z mojej strony, przepraszam. :upside_down_face:
Metoda GetTableAnnotations nie istnieje bezpośrednio w plikach " *.swdrum" , ale tylko w arkuszach MEP  .
Najpierw musisz pobrać każdy arkusz za pomocą GetSheets, a następnie na każdym arkuszu użyć GetTableAnnotations , aby uzyskać dostęp do tabel
przykład:
https://help.solidworks.com/2022/english/api/sldworksapi/Get_Table_Annotation_and_Contents_Example_VB.htm

Ale tak naprawdę nie mam czasu na tworzenie makra... To powiedziawszy, z przykładami @sbadenis i odrobiną praktyki, nie powinno to być nie do pokonania.