Ich bin ein Anfänger in Sachen Makros, wir verwenden Solidworks an der BE und ich möchte einige Aufgaben automatisieren. Aktuell exportiere ich die Stücklisten seit der Zeichnung nach Excel und integriere sie in unser ERP. Ich hätte gerne ein Makro, um die Nomenklatur mit dem gleichen Namen wie die Zeichnung und im selben Ordner zu exportieren.
Ich habe es über Chatgpt unmöglich versucht.
Ich habe etwas recherchiert, kann aber nicht finden, wonach ich suche, hat jemand ein Makro, das meiner Anfrage ähnelt, in seiner Toolbox?
Vielen Dank für Ihre schnelle Antwort, ich hatte diese Themen gesehen, aber das erste Thema integriert eine Nomenklatur, exportiert sie und löscht sie. Ich möchte, dass das Makro die Nomenklatur auswählt, die sich in der Zeichnung befindet, und sie nach xlsx exportiert.
Hallo @Jérémy_Guillon ; Sie sollten in Ihren Anfragen präziser sein...
Die Solidworks-Version
Die Excel-Version
den Namen des oder von Zeichnungsblättern
Der Name und die Art der Nomenklaturen...
Der Zielort (dynamisch oder statisch?)…
(Im Zweifelsfall exportiert das folgende Makro alle in einer Zeichnung gefundenen Stücklisten in eine *.xlsx-Datei ( 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
Persönliche Anmerkung: Programmieren lernt man nie, wenn man eine KI direkt fragt. Denken Sie daran, dass es 10-mal schwieriger ist, einen Code zu lesen , als ihn zu schreiben.
Es stimmt, dass ich es nicht allzu gewohnt bin, in Foren zu gehen. Wir sind in SW 2023 SP5.0, für Excel Version 16.0. Normalerweise heißt das Blatt PLAN und die Stückliste wird BOM1 genannt Für den Speicherort und den Namen der Datei möchte ich den gleichen Namen wie die sw-Datei haben und sie wird im Quellordner der Zeichnung gespeichert.
Ich habe das vorgeschlagene Makro getestet und habe ein Debuggen auf dieser Ebene:
Für jede swTableAnnotation in swDraw.GetTableAnnotations
Ich weiß, dass das das Problem ist, wenn ich einige Tests durchgeführt habe.
Ich verstehe KI, ich würde gerne wissen, wie man programmiert und lernt, aber ich bin der einzige, der Aufgaben in den Büros über Macro SW oder einfach durch Excel-Formeln automatisieren möchte. (die anderen ziehen es vor, Aufgaben zu tippen und zu wiederholen und Fehler zu machen) die Person, mit der ich angefangen habe und die mir die VBA gezeigt hat, ist weg und ich bin die einzige im BE,... Also versuche ich, es alleine zu machen, wenn ich ein wenig Zeit habe. Und ich gebe zu, dass es einfach ist, sobald man bei der einen oder anderen Formel nicht weiterkommt...
So viel zu mir, sorry. Die GetTableAnnotations-Methode ist nicht direkt in den "*.swdrum" -Dateien vorhanden, sondern nur in den MEP-Blättern . Sie müssen zuerst jedes Blatt über GetSheets abrufen und dann auf jedem Blatt GetTableAnnotations verwenden, um auf die Tabellen zuzugreifen Beispiel: https://help.solidworks.com/2022/english/api/sldworksapi/Get_Table_Annotation_and_Contents_Example_VB.htm … Aber ich habe nicht wirklich Zeit, das Makro zu erstellen... Mit den Beispielen von @sbadenis und ein wenig Übung sollte es jedoch nicht unüberwindbar sein.