Het doel is om automatisch via een VBA-macro een naam in een assembly te maken en deze te exporteren naar een Excel-bestand waarvan de naam de naam van het onderdeelbestand + een aangepaste eigenschap zal zijn. Ten slotte moet de macro de gemaakte stuklijst verwijderen.
Kijk naar de bijgevoegde macro, normaal gesproken is alles aanwezig (een beetje los en zonder veiligheidscontroles). Verander in ieder geval de regels:
Als u het pad naar uw stuklijstsjabloon wilt plaatsen, moet u de naam van uw standaardconfiguratie in uw asms en de naam van uw aangepaste eigenschap in de bestandsnaam plaatsen.
Dank u voor uw antwoord d.roger, de macro werkt, enige kleine probleem, toen ik de aangepaste eigenschap waar je me vertelde dat de waarde van de eigenschap niet wordt geretourneerd in de bestandsnaam. Ik heb de indruk dat de regel die de naam van het bestand in de macro maakt, er is geen herinnering aan de eigenschap, ik heb geprobeerd deze toe te voegen, maar de tests zijn aan deze kant niet overtuigend.
Perfect door deze wijziging te maken, werkt de macro zoals ik wilde. Ter verbetering is het mogelijk om de spreadsheet in dezelfde map op te slaan als de assembly.
Als je je Excel-bestand ook een beetje een lay-out wilt geven, kun je rijen toevoegen zoals bijvoorbeeld:
NumCol = swBOMAnnotation.ColumnCount
NumRow = swBOMAnnotation.RowCount
xlApp.Worksheets(xlApp.ActiveSheet.Name).Rows(1).RowHeight = 40
For I = 1 To NumRow - 1
xlApp.Worksheets(xlApp.ActiveSheet.Name).Rows(I + 1).RowHeight = 20
Next I
For J = 0 To NumCol - 1
xlApp.Worksheets(xlApp.ActiveSheet.Name).Columns(J + 1).ColumnWidth = 25
xlApp.ActiveSheet.Cells(1, J + 1).Interior.ColorIndex = 15
Next J
For I = 0 To NumRow - 1
For J = 0 To NumCol - 1
xlApp.ActiveSheet.Cells(I + 1, J + 1).NumberFormat = "@"
xlApp.ActiveSheet.Cells(I + 1, J + 1).VerticalAlignment = 2
sht.Cells(I + 1, J + 1).Value = swBOMAnnotation.Text(I, J)
Next J
Next I
In plaats van:
NumCol = swBOMAnnotation.ColumnCount
NumRow = swBOMAnnotation.RowCount
For I = 0 To NumRow
For J = 0 To NumCol
sht.Cells(I + 1, J + 1).Value = swBOMAnnotation.Text(I, J)
Next J
Next I
is vooral interessant als u numerieke waarden heeft die beginnen met 0, omdat het de Excel-cel in tekstformaat plaatst en zo voorkomt dat de 0 aan het begin verloren gaat.
Het toeval is dat ik bezig ben met automatische nomenclatuur en deze macro komt net op tijd. Ik heb alleen één probleem, namelijk dat het informatie ophaalt over onderdelen van het eerste niveau en niet over onderdelen in een assemblage of subassemblage van subassemblage van assemblage enz.
Ja, er is een oplossing, u vervangt de regel "BomType = swBomType_TopLevelOnly" door "BomType = swBomType_Indented", dit zou de nomenclatuur op meerdere niveaus moeten plaatsen.
Hallo Ik denk dat het te maken heeft met het feit dat het bestand op de oude url van de site staat. Niet veilig, dus de browser loopt vast (althans dat gebeurt thuis)
Ik heb geen problemen met het downloaden (Firefox?), hier is het (weer): insert-bom-asm.swp (77.5 kB)
en als het echt niet werkt, hier is de " Typescript " versie:
Option Explicit
Sub main()
Dim xlApp As Excel.Application
Set xlApp = New Excel.Application
Dim wbk As Excel.Workbook
Dim sht As Excel.Worksheet
With xlApp
.Visible = True
Set wbk = .Workbooks.Add
Set sht = wbk.ActiveSheet
End With
Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim swModelDocExt As SldWorks.ModelDocExtension
Dim swBOMAnnotation As SldWorks.BomTableAnnotation
Dim swBOMFeature As SldWorks.BomFeature
Dim boolstatus As Boolean
Dim BomType As Long
Dim Configuration As String
Dim TemplateName As String
Set swApp = Application.SldWorks
Set swModel = swApp.ActiveDoc
Set swModelDocExt = swModel.Extension
TemplateName = "Z:\Model_SW\Nomenclature.sldbomtbt"
BomType = swBomType_TopLevelOnly
Configuration = "Défaut"
Set swBOMAnnotation = swModelDocExt.InsertBomTable3(TemplateName, 0, 0, BomType, Configuration, False, swNumberingType_Detailed, True)
Set swBOMFeature = swBOMAnnotation.BomFeature
swModel.ForceRebuild3 True
Dim NumCol As Long
Dim NumRow As Long
Dim I As Long
Dim J As Long
NumCol = swBOMAnnotation.ColumnCount
NumRow = swBOMAnnotation.RowCount
For I = 0 To NumRow
For J = 0 To NumCol
sht.Cells(I + 1, J + 1).Value = swBOMAnnotation.Text(I, J)
Next J
Next I
boolstatus = swModelDocExt.SelectByID2(swBOMFeature.GetFeature.Description, "BOMFEATURE", 0, 0, 0, True, 0, Nothing, 0)
swModel.EditDelete
swModel.ForceRebuild3 True
Dim config As SldWorks.Configuration
Dim cusPropMgr As SldWorks.CustomPropertyManager
Dim lRetVal As Long
Dim ValOut As String
Dim ResolvedValOut As String
Dim wasResolved As Boolean
Dim nNbrProps As Long
Dim vPropNames As Variant
Dim vPropTypes As Variant
Dim vPropValues As Variant
Dim resolved As Variant
Dim custPropType As Long
Dim K As Long
Dim NomProperty As String
Set config = swModel.GetActiveConfiguration
Set cusPropMgr = config.CustomPropertyManager
nNbrProps = cusPropMgr.Count
vPropNames = cusPropMgr.GetNames
For K = 0 To nNbrProps - 1
cusPropMgr.Get2 vPropNames(K), ValOut, ResolvedValOut
custPropType = cusPropMgr.GetType2(vPropNames(K))
If vPropNames(K) = "DESSINATEUR" Then
NomProperty = ResolvedValOut
End If
Next K
Dim chemin As String
chemin = Environ("USERPROFILE") & "\Desktop\" & swModel.GetTitle & "-" & NomProperty & ".xls"
With xlApp
wbk.SaveAs chemin
wbk.Close
.Quit
End With
End Sub