AnsweredAssumed Answered

Issue with BOM Macro

Question asked by Trevor Wunn on Aug 11, 2014
Latest reply on Aug 12, 2014 by Trevor Wunn

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

Outcomes