Seit geraumer Zeit habe ich ein Problem mit dem .cvs-Export meiner Nomenklaturen. Lassen Sie mich das erklären: Es scheint, dass Solidworks im Grunde genommen Kommas als Trennzeichen verwendet, und ich hätte lieber Semikolons. Also muss ich in .xls speichern, dann mit Excel, um in .csv zu speichern (Excel verwendet die richtigen Trennzeichen), was jedem Export einen mühsamen Schritt hinzufügt.
Haben Sie eine Lösung? Ich bin nicht auf dem neuesten Stand mit Makros, denken Sie, dass ich diesen Weg gehen sollte? Ich habe nach einer Suche keine Lösung gefunden.
Ich weiß nicht, ob sie verwandt sind, aber zögern Sie nicht, den Test durchzuführen, indem Sie das Listentrennzeichen in den regionalen Optionen ändern ...
Leider funktioniert die Lösung von Macros227 nicht:(
Was Makros angeht, so beherrsche ich sie überhaupt nicht. Ich denke, es ist überhaupt nicht kompliziert, eine Tabelle mit Semikolons als Trennzeichen zu exportieren, oder riskiere ich, Zeit damit zu verbringen?
Es sollte nicht viel länger als 5 Minuten dauern, du nimmst das Makro, das in der Frage des von Todesco angegebenen Links steht, und ersetzst darin die Zeile:
sRowStr = sRowStr & swTable.Text(i, j) & " | "
Von ihm:
sRowStr = sRowStr & swTable.Text(i, j) & "; "
Und so müssen Sie eine CSV-Datei mit einem; als Trennzeichen. Dieser wird im selben Ordner wie Ihr Plan gespeichert.
Vielen Dank, es funktioniert tatsächlich! Gibt es jedoch eine Möglichkeit, nur die "aktive" Nomenklatur zu exportieren? Ich habe manchmal mehrere Stücklisten pro Seite und möchte auswählen können, welche davon exportiert werden soll. Mit diesem, Makro, ist es die letzte gefundene Nomenklatur, die aufgezeichnet wird, wenn ich es richtig verstehe.
Mit dem betreffenden Makro können Sie alle Stücklisten im Plan auswählen und in die CSV-Datei schreiben (vorbehaltlich der von .PL in der ursprünglichen Diskussion erläuterten Änderung , um zu vermeiden, dass jeder Stücklistenexport den vorherigen Stücklistenexport überschreibt).
Wenn Sie nur eine Stückliste extrahieren möchten, die Sie im Baum ausgewählt haben, sollte dies durch Ersetzen der Zeilen möglich sein:
Set swFeat = swModel.FirstFeature
Tun Sie es nicht, obwohl es nicht ist, ist nichts Wenn "BomFeat" = swFeat.GetTypeName, dann Set swBomFeat = swFeat.GetSpecificFeature2 ProcessBomFeature swBomFeat Ende, wenn Set swFeat = swFeat.GetNextFeature Schleife vTableArr = swBomFeat.GetTableAnnotations
Mit der Funktion "GetSelectedObject6", die Sie hier finden. Vergessen Sie nicht, die Funktion "ProcessBomFeature" nach der Auswahlfunktion zu verwenden.
Set swFeat = swModel.FirstFeature
Do While Not swFeat Is Nothing
If "BomFeat" = swFeat.GetTypeName Then
Set swBomFeat = swFeat.GetSpecificFeature2
ProcessBomFeature swBomFeat
End If
Set swFeat = swFeat.GetNextFeature
Loop
vTableArr = swBomFeat.GetTableAnnotations
Bis:
Set SelMgr = swModel.SelectionManager
Set swBomFeat = SelMgr.GetSelectedObject6(1, 0)
ProcessBomFeature swBomFeat
Es funktioniert. Mein Fehler bestand darin, zu denken, dass die Nomenklatur diejenige ist, die in der zentralen Benutzeroberfläche ausgewählt ist, und nicht im Baum auf der linken Seite des Bildschirms. Gibt es eine Funktion zum Exportieren der "aktiven" Nomenklatur, im Sinne des Wortes, die in der zentralen Schnittstelle ausgewählt wurde?
Ja, das ist möglich, aber indem man auch die Stücklistenexportfunktion ändert, denn plötzlich wird kein "BomFeature"-Element mehr übertragen:
Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Sub main()
Dim swFeat As SldWorks.Feature
Dim swBomFeat As SldWorks.BomFeature
Set swApp = Application.SldWorks
Set swModel = swApp.ActiveDoc
Set selmgr = swModel.SelectionManager
Set vTable = selmgr.GetSelectedObject6(1, -1)
ProcessBomSelect vTable
MsgBox "Export de la BOM terminé."
End Sub
Sub ProcessBomSelect(vTable As Variant)
Dim swTable As SldWorks.TableAnnotation
Dim swAnn As SldWorks.Annotation
Dim nNumCol As Long
Dim nNumRow As Long
Dim sRowStr As String
Dim I As Long
Dim J As Long
Set swTable = vTable
Set swAnn = swTable.GetAnnotation
nNumCol = swTable.ColumnCount
nNumRow = swTable.RowCount
Dim xlsPath As String
xlsPath = Mid(swModel.GetPathName, 1, InStrRev(swModel.GetPathName, "\"))
Dim xlsName As String
If InStrRev(swModel.GetTitle, ".") > 0 Then
xlsName = Mid(swModel.GetTitle, 1, InStrRev(swModel.GetTitle, ".") - 1) & ".csv"
Else
xlsName = swModel.GetTitle & ".csv"
End If
For I = 0 To nNumRow - 1
sRowStr = ""
For J = 0 To nNumCol - 1
sRowStr = sRowStr & swTable.Text(I, J) & ";"
Next J
Next I
swTable.SaveAsText xlsPath & xlsName, ";"
End Sub