Wie können wir eine Stückliste nach Excel in VBA exportieren, da ich meinen Materialfluss in Excel arbeite, den ich in eine Flusssoftware exportiere.
Ich möchte die Stückliste jedoch in eine Excel-Datei oder eine CSV-Datei exportieren, die es mir ermöglicht, meine Stückliste direkt in meine Flow-Software zu importieren.
Oder noch besser, um die Informationen der Nomenklatur abzurufen, ohne sie unbedingt zu erstellen, d.h. Bezeichnung, Länge, Breite, Dicke, Anzahl plus ein oder zwei Eigenschaften eines Formulars, um sie in Excel zu importieren
Dieser Beitrag folgt auf Folge 1 Staffel 1 unten. https://www.lynkoa.com/forum/solidworks/ins%C3%A9rer-mise-en-plan-avec-nomenclature-solidworks
Schauen Sie sich vor allem die letzten Beiträge an, es geht darum, eine automatische Funktion zu erstellen, die SW anscheinend bisher nicht bietet. Ideal für @treza88 wäre es, die Excel-Datei direkt zu generieren, ohne die Nomenklatur entweder im ASM oder im MEP zu erstellen, die er zu diesem Zeitpunkt nicht verwendet.
Starten Sie eine Software, die eine Stückliste in Excel erstellt, ohne dass sie im ASM oder im MEP erscheint. ;-) ;-)
Hallo Es gibt mehrere Möglichkeiten, die Stückliste nach Makros zu exportieren . Für die Zeichnung einer Teilebaugruppe:
Option Explicit
Sub main()
Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim swDraw As SldWorks.DrawingDoc
Dim swActiveView As SldWorks.View
Dim swBOMTable As SldWorks.BomTableAnnotation
Dim Config As String
Dim TemplateName As String
Set swApp = Application.SldWorks
Set swModel = swApp.ActiveDoc
Set swDraw = swModel
Set swActiveView = swDraw.GetFirstView
Set swActiveView = swActiveView.GetNextView
Config = swActiveView.ReferencedConfiguration
TemplateName = "C:\Program Files\SolidWorks Corp\SolidWorks\lang\english\bom-standard.sldbomtbt"
Set swBOMTable = swActiveView.InsertBomTable2(False, 0, 0.2, swBOMConfigurationAnchorType_e.swBOMConfigurationAnchor_TopLeft, swBomType_e.swBomType_Indented, Config, TemplateName)
WriteBom "C:\Temp\myBom.xls", swBOMTable
' delete table
Dim swBOMFeat As SldWorks.BomFeature
Set swBOMFeat = swBOMTable.BomFeature
Dim swFeat As SldWorks.Feature
Set swFeat = swBOMFeat.GetFeature
swFeat.Select2 False, -1
swModel.EditDelete
End Sub
Sub WriteBom(FilePath As String, table As SldWorks.TableAnnotation)
Dim N As Integer
N = FreeFile
Open FilePath For Output As #N
Dim i As Integer
Dim j As Integer
Dim myArray() As Variant
ReDim myArray(table.ColumnCount - 1)
For i = 0 To table.RowCount - 1
For j = 0 To table.ColumnCount - 1
myArray(j) = table.Text(i, j)
Next
Print #N, Join(myArray, vbTab)
Next
Close #N
End Sub
Option Explicit
Sub main()
Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim swDraw As SldWorks.DrawingDoc
Dim swActiveView As SldWorks.View
Dim swWeldTable As SldWorks.WeldmentCutListAnnotation
Dim Config As String
Dim TemplateName As String
Set swApp = Application.SldWorks
Set swModel = swApp.ActiveDoc
Set swDraw = swModel
Set swActiveView = swDraw.GetFirstView
Set swActiveView = swActiveView.GetNextView
Config = swActiveView.ReferencedConfiguration
TemplateName = "C:\Program Files\SolidWorks Corp\SolidWorks\lang\english\cut list.sldwldtbt"
Set swWeldTable = swActiveView.InsertWeldmentTable(False, 0, 0.2, swBOMConfigurationAnchorType_e.swBOMConfigurationAnchor_TopLeft, Config, TemplateName)
WriteBom "C:\Temp\myBom.xls", swWeldTable
' delete table
Dim swWeldFeat As SldWorks.WeldmentCutListFeature
Set swWeldFeat = swWeldTable.WeldmentCutListFeature
Dim swFeat As SldWorks.Feature
Set swFeat = swWeldFeat.GetFeature
swFeat.Select2 False, -1
swModel.EditDelete
End Sub
Sub WriteBom(FilePath As String, table As SldWorks.TableAnnotation)
Dim N As Integer
N = FreeFile
Open FilePath For Output As #N
Dim i As Integer
Dim j As Integer
Dim myArray() As Variant
ReDim myArray(table.ColumnCount - 1)
For i = 0 To table.RowCount - 1
For j = 0 To table.ColumnCount - 1
myArray(j) = table.Text(i, j)
Next
Print #N, Join(myArray, vbTab)
Next
Close #N
End Sub
Ich habe einen Codeausschnitt gefunden, der funktioniert, um die Tabelle zu erstellen [ swtable = swDrawing.InsertTableAnnotation2(False, 0, 0, swBOMConfigurationAnchor_TopLeft, Templatetable, 4, 2)]
Auf der anderen Seite ruft es in meiner erstellten Excel-Datei die Formel der Eigenschaft [$PRP:"SW-Dateiname"[ ab, aber nicht der Wert, während auf der Tabelle auf SW korrekt ist (siehe Druck, Bildschirm) und ich kann den Code nicht ändern, um die erstellte allgemeine Tabelle zu löschen.
Danke für Ihre Hilfe.
Option Explicit
Sub main()
Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim swDraw As SldWorks.DrawingDoc
Dim swActiveView As SldWorks.View
Dim swWeldTable As SldWorks.WeldmentCutListAnnotation
Dim Config As String
Dim TemplateName As String
Set swApp = Application.SldWorks
Set swModel = swApp.ActiveDoc
Set swDraw = swModel
Set swActiveView = swDraw.GetFirstView
Set swActiveView = swActiveView.GetNextView
Config = swActiveView.ReferencedConfiguration
Templatetable = "C:\test article.sldtbt"
Set swTable = swDrawing.InsertTableAnnotation2(False, 0, 0, swBOMConfigurationAnchor_TopLeft, Templatetable, 4, 2)
WriteBom "C:\Temp\mytable.xls", swTable
' delete table
Dim swWeldFeat As SldWorks.WeldmentCutListFeature
Set swWeldFeat = swWeldTable.WeldmentCutListFeature
Dim swFeat As SldWorks.Feature
Set swFeat = swWeldFeat.GetFeature
swFeat.Select2 False, -1
swModel.EditDelete
End Sub
Sub WriteBom(FilePath As String, table As SldWorks.TableAnnotation)
Dim N As Integer
N = FreeFile
Open FilePath For Output As #N
Dim i As Integer
Dim j As Integer
Dim myArray() As Variant
ReDim myArray(table.ColumnCount - 1)
For i = 0 To table.RowCount - 1
For j = 0 To table.ColumnCount - 1
myArray(j) = table.Text(i, j)
Next
Print #N, Join(myArray, vbTab)
Next
Close #N
End Sub