Issue with BOM Macro

Good Afternoon Everyone,

I'm having an issue with my code that I could use some advice on. The macro is supposed to run on a drawing, load the model if it isn't already, find a BOM, if it finds one, select it, find items in the bom and combine them.

It is getting stuck right after it selects it. I know I'm missing something but I'm not sure what it is.

Thanks for your help!

-Trevor

Option Explicit

Dim swApp As SldWorks.SldWorks

Dim swModel As SldWorks.ModelDoc2

Dim swDraw As SldWorks.DrawingDoc

Dim swSelMgr As SldWorks.SelectionMgr

Dim swTable As SldWorks.TableAnnotation

Dim swBomTable As SldWorks.BomTableAnnotation

Dim swBomFeat As SldWorks.BomFeature

Dim swFeat As SldWorks.Feature

Dim swView As SldWorks.View

Dim swAnn As SldWorks.Annotation

Dim swSelData As SldWorks.SelectData

Dim numCol As Long

Dim numRow As Long

Dim i As Long

Dim j As Long

Dim boolStatus As Boolean

Dim pipeTotal As String

Dim pipeLength As String

Dim pipeQuantity As String

Dim flatBarTotal As String

Dim flatBarLength As String

Dim flatBarQuantity As String

Dim longStatus As Long

Sub main()

Set swApp = Application.SldWorks

Set swModel = swApp.ActiveDoc

Set swDraw = swModel

Set swSelMgr = swModel.SelectionManager

'Load model

Set swView = swDraw.GetFirstView

Set swView = swView.GetNextView

boolStatus = swView.LoadModel()

'If boolStatus = True Then

'    MsgBox "Model Loaded. Please insert new" & Chr(34) & "Top-Level Only" & Chr(34) & "BOM and select it before proceeding", vbCritical, "Error, Son!!"

'    Exit Sub

'End If

'Rename first BOM found

Set swFeat = swModel.FirstFeature

Do While Not swFeat Is Nothing

    If "BomFeat" = swFeat.GetTypeName Then

        boolStatus = True

        swFeat.Name = "Bill of Materials1"

        swFeat.Select (False)

    End If

    If (boolStatus) Then Exit Do

    Set swFeat = swFeat.GetNextFeature

Loop

'Select BOM

Set swView = swDraw.GetFirstView

While Not swView Is Nothing

    Set swAnn = swView.GetFirstAnnotation3

        While Not swAnn Is Nothing

            Debug.Print swAnn.GetName

            If swTableAnnotation = swAnn.GetType Then

                boolStatus = swAnn.Select3(True, swSelData)

            End If

            Set swAnn = swAnn.GetNext3

        Wend

    Set swView = swView.GetNextView

Wend

          

XXXXXXXXXXXX This is where I am having issues XXXXXXXXXXX

Set swTable = swSelMgr.GetSelectedObject5(1)

Set swBomTable = swTable

Set swTable = swBomTable

Set swBomFeat = swBomTable.BomFeature

pipeTotal = 0

pipeLength = 0

pipeQuantity = 0

flatBarTotal = 0

flatBarLength = 0

flatBarQuantity = 0

numCol = swTable.ColumnCount

numRow = swTable.RowCount

For i = 0 To numRow - 1

    For j = 0 To numCol - 1

        If swTable.Text(i, j) = "STL PIPE 1.25, SCH 40" Then

            pipeLength = swTable.Text(i, j + 1)

            pipeQuantity = swTable.Text(i, j + 3)

            pipeTotal = pipeTotal + (pipeLength * pipeQuantity)

            Debug.Print "Current Pipe Quantity: " & pipeTotal

        ElseIf swTable.Text(i, j) = "STL FLAT BAR .25 X 5" Then

            flatBarLength = swTable.Text(i, j + 1)

            flatBarQuantity = swTable.Text(i, j + 3)

            flatBarTotal = flatBarTotal + (flatBarLength * flatBarQuantity)

            Debug.Print "Current FlatBar Quantity: " & flatBarTotal

        End If

    Next j

Next i

pipeTotal = (Int((((pipeTotal * 1.1) / 12) / 21)) + 1) * 12 * 21

Debug.Print "Final Pipe Total: " & pipeTotal

flatBarTotal = (Int((((flatBarTotal * 1.1) / 12) / 20)) + 1) * 12 * 20

Debug.Print "Final FlatBar Total: " & flatBarTotal

swBomFeat.PartConfigurationGrouping = swDisplay_ConfigurationWithSameName_AsOneItem

For i = 1 To numRow

If swTable.Text(i, 2) = "STL PIPE 1.25, SCH 40" Then

    swTable.Text(i, 3) = pipeTotal

    swTable.Text(i, 4) = "-"

    swTable.Text(i, 5) = "1"

    swTable.Text(i, 6) = "FIELD FIT"

ElseIf swTable.Text(i, 2) = "STL FLAT BAR .25 X 5" Then

    swTable.Text(i, 3) = flatBarTotal

    swTable.Text(i, 4) = "-"

    swTable.Text(i, 5) = "1"

    swTable.Text(i, 6) = "FIELD FIT"

End If

Next

End Sub

SolidworksApi macros