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?
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.
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...
To tyle z mojej strony, przepraszam. 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.