Insert a BOM via VBA macro

Hello everyone,
I am working on solidworks 2021 and in order to save time on certain tasks, I am looking to insert a bill of materials on an overview plan via a VBA macro.
I have a good base but there is a problem, this code doesn't really work either it inserts the name, but I have error code 13 that appears, or it doesn't insert it and I have error code 91. Can you help me?

Dim swApp As Object

Dim Part As Object
Dim boolstatus As Boolean
Dim longstatus As Long, longwarnings As Long
Dim swActiveView As Object
Dim swBOMTable As Object
'Dim swBOMAnnotation As SldWorks.BomFeature


Dim swModelDocExt           As SldWorks.ModelDocExtension
Dim swDrawing               As SldWorks.DrawingDoc
Dim swView                  As SldWorks.View
Dim swBOMAnnotation         As SldWorks.BomTableAnnotation
Dim swBOMFeature            As SldWorks.BomFeature
Dim swNote                  As SldWorks.Note
Dim BomBalloonParams        As SldWorks.BalloonOptions

Dim AnchorType              As Long
Dim BomType                 As Long
Dim nErrors                 As Long
Dim nWarnings               As Long
Dim Configuration           As String
Dim TableTemplate           As String

Sub main()

' F5 exécution code
' F8 pas à pas

    ' Je rentre dans solidworks
Set swApp = Application.SldWorks
    ' Je rentre dans mon doc actif
Set Part = swApp.ActiveDoc

'boolstatus = Part.ActivateView("Vue de mise en plan1")
    ' Je sélectionne ma vue
boolstatus = Part.Extension.SelectByID2("Vue de mise en plan1", "DRAWINGVIEW", 0.121991020408163, 0.145772448979592, 0, False, 0, Nothing, 0)
    ' La vue séléctionnée est activée
Set swActiveView = Part.ActiveDrawingView

AnchorType = swBOMConfigurationAnchor_TopLeft
BomType = swBomType_e.swBomType_TopLevelOnly
Configuration = "Défaut"
TableTemplate = "X:\Biblio\BIBLIO MECA\BASE DE DONNEES\NOMENCLATURES\NOM_ROBAUT.sldbomtbt"
'Hidden = False
'IndentedNumberingType = swNumberingType_Flat
' J'insère une table
swBOMAnnotation = swActiveView.InsertBomTable4(False, 0, 0, AnchorType, BomType, Configuration, TableTemplate, False, swNumberingType_Detailed, False)

boolstatus = Part.EditRebuild3()
boolstatus = Part.ActivateSheet("Feuille1")
End Sub

Hello and welcome;

Some errors on your macro (probably from a recording?):

Get inspired by the example below: Insert a BOM via VBA macro

'-----------------------------------------------------
' Preconditions: Open a drawing document and select
' a drawing view.
'
' Postconditions:
' 1. Inserts a BOM at the anchor point, if the
'    drawing view does not already contain a BOM.
' 2. Examine the drawing and FeatureManager design tree.
'-----------------------------------------------------
Option Explicit

Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim swSelMgr As SldWorks.SelectionMgr
Dim swFeatMgr As SldWorks.FeatureManager
Dim swView As SldWorks.View
Dim swBomAnn As BomTableAnnotation
Dim swBomFeat As SldWorks.BomFeature
Dim AnchorType As Long
Dim BomType As Long
Dim Configuration As String
Dim TableTemplate As String
Dim Names As Variant
Dim Visible As Variant
Dim boolstatus As Boolean

Sub main()

    Set swApp = Application.SldWorks
    Set swModel = swApp.ActiveDoc
    Set swSelMgr = swModel.SelectionManager
    Set swFeatMgr = swModel.FeatureManager    

    ' Get selected drawing view
    Set swView = swSelMgr.GetSelectedObject6(1, 0)
    AnchorType = swBOMConfigurationAnchorType_e.swBOMConfigurationAnchor_BottomLeft
    BomType = swBomType_e.swBomType_TopLevelOnly
    Configuration = ""
    TableTemplate = ""    

    ' Insert BOM table
    Set swBomAnn = swView.InsertBomTable2(True, 0.4, 0.3, AnchorType, BomType, Configuration, TableTemplate)    

    swModel.ClearSelection2 True    

    ' Because BOM type is swBomType_TopLevelOnly,
    ' then work with BomFeature to get and set configurations
    Set swBomFeat = swBomAnn.BomFeature
    Names = swBomFeat.GetConfigurations(False, Visible)
    Visible(0) = True
    boolstatus = swBomFeat.SetConfigurations(True, Visible, Names)    

    ' Update FeatureManager design tree
    swFeatMgr.UpdateFeatureTree

End Sub

or with other examples:

Kind regards.

2 Likes