Od dłuższego czasu mam problem z eksportem .cvs moich nomenklatur. Pozwólcie, że wyjaśnię: wygląda na to, że w zasadzie Solidworks używa przecinków jako separatorów, a ja wolałbym mieć średniki. Muszę więc zapisywać w .xls, a następnie w Excelu, aby zapisać w .csv (excel używa odpowiednich separatorów), co dodaje żmudny krok do każdego eksportu.
Czy masz rozwiązanie? Nie jestem na bieżąco z makrami, myślisz, że powinienem przejść w ten sposób? Po poszukiwaniach nie znalazłem rozwiązania .
Jeśli chodzi o makra, w ogóle ich nie opanowuję. Wydaje mi się, że eksportowanie tabeli ze średnikami jako separatorami wcale nie jest skomplikowane, czy ryzykuję poświęcenie na nią czasu?
Dziękuję bardzo, rzeczywiście to działa! Czy jednak istniałby sposób na eksport tylko "aktywnej" nomenklatury? Czasami mam wiele zestawień komponentów na stronie i chciałbym mieć możliwość wyboru, który z nich ma być eksportowany. W tym przypadku, makro, jest to ostatnia znaleziona nomenklatura, która jest rejestrowana, jeśli dobrze rozumiem.
Makro, o którym mowa, pozwala na zaznaczenie wszystkich BOM-ów w planie i zapisanie ich do pliku csv (pod warunkiem dokonania modyfikacji wyjaśnionej przez .PL w pierwotnym omówieniu, aby uniknąć nadpisywania poprzedniego eksportu BOM przez każdy eksport).
Jeśli chcesz wyodrębnić tylko zestawienie komponentów, które zostało wybrane w drzewie, powinno to być możliwe poprzez zamianę wierszy:
Ustaw swFeat = swModel.FirstFeature
Zrób Póki Nie SwFeat Nic Jeśli "BomFeat" = swFeat.GetTypeName, to Ustaw swBomFeat = swFeat.GetSpecificFeature2 ProcessBomFeature swBomFeat Zakończ jeżeli: Ustaw swFeat = swFeat.GetNextFeature Pętla vTableArr = swBomFeat.GetTableAnnotations
Korzystając z funkcji "GetSelectedObject6", którą można znaleźć tutaj. Nie zapomnij użyć funkcji "ProcessBomFeature" po funkcji wyboru.
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
Przez:
Set SelMgr = swModel.SelectionManager
Set swBomFeat = SelMgr.GetSelectedObject6(1, 0)
ProcessBomFeature swBomFeat
To działa. Moim błędem było myślenie, że nomenklatura została wybrana w centralnym interfejsie, a nie w drzewie po lewej stronie ekranu. Czy istnieje funkcja eksportu "aktywnej" nomenklatury w znaczeniu tego słowa, wybranej w centralnym interfejsie?
Tak, jest to możliwe, ale również poprzez modyfikację funkcji eksportu BOM, ponieważ nagle nie jest to już element "BomFeature", który jest przesyłany:
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