I use Get Components in Each BOM Table Row (VBA) but appear an run-time error in vPtArr = swBOMTableAnn.GetComponents(J) line , any idea.
In SW 2010 work ok, i modify this macro for add instance name in BOM , for each part or row.
I use Get Components in Each BOM Table Row (VBA) but appear an run-time error in vPtArr = swBOMTableAnn.GetComponents(J) line , any idea.
In SW 2010 work ok, i modify this macro for add instance name in BOM , for each part or row.
Hi Filipe, thanks for all . I try this (see below) macro in oher machine with SP0 and work ok.
----------------------------------------------------------------------
This example shows how to get the components in each row in a BOM table annotation.
'-------------------------------------------------
' Preconditions: Drawing document is open that contains
' one or more bill of materials tables.
'
' Postconditions: None
'-------------------------------------------------
Option Explicit
Sub ProcessTableAnn(swApp As SldWorks.SldWorks, swModel As SldWorks.ModelDoc2, swTableAnn As SldWorks.TableAnnotation)
Dim nNumRow As Long
Dim J As Long
Dim I As Long
Debug.Print " Table Title " & swTableAnn.Title
nNumRow = swTableAnn.RowCount
Dim swBOMTableAnn As BomTableAnnotation
Set swBOMTableAnn = swTableAnn
For J = 0 To nNumRow - 1
Debug.Print " Row Number " & J & " Component Count : " & swBOMTableAnn.GetComponentsCount(J)
Dim vPtArr As Variant
Dim swComp As Object
Dim pt As Object
vPtArr = swBOMTableAnn.GetComponents(J)
If (Not IsEmpty(vPtArr)) Then
For I = 0 To UBound(vPtArr)
Set pt = vPtArr(I)
Set swComp = pt
If Not swComp Is Nothing Then
Debug.Print " Component Name :" & swComp.Name2 & " Configuration Name : " & swComp.ReferencedConfiguration
Else
Debug.Print " Could not get component."
End If
Next
End If
Next J
End Sub
Sub ProcessBomFeature(swApp As SldWorks.SldWorks, swModel As SldWorks.ModelDoc2, swBomFeat As SldWorks.BomFeature)
Dim swFeat As SldWorks.Feature
Dim vTableArr As Variant
Dim vTable As Variant
Dim swTable As SldWorks.TableAnnotation
Set swFeat = swBomFeat.GetFeature
vTableArr = swBomFeat.GetTableAnnotations
For Each vTable In vTableArr
Set swTable = vTable
ProcessTableAnn swApp, swModel, swTable
Next vTable
End Sub
Sub main()
Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim swDraw As SldWorks.DrawingDoc
Dim swSheet As SldWorks.Sheet
Dim swFeat As SldWorks.Feature
Dim swBomFeat As SldWorks.BomFeature
Dim nNumSheet As Long
Dim nRetval As Long
Dim I As Long
Dim bRet As Boolean
Set swApp = Application.SldWorks
Set swModel = swApp.ActiveDoc
Set swDraw = swModel
Set swFeat = swModel.FirstFeature
Do While Not swFeat Is Nothing
If "BomFeat" = swFeat.GetTypeName Then
Debug.Print "******************************"
Debug.Print "Feature Name :- " & swFeat.Name
Set swBomFeat = swFeat.GetSpecificFeature2
ProcessBomFeature swApp, swModel, swBomFeat
End If
Set swFeat = swFeat.GetNextFeature
Loop
End Sub
-----------------------------------------------------------------------------------
Hi Jorge, it would help if we could see a snippet of the code.
Cheers