Macro to change the Bill Of Materials options (Part Number source and children visibility) of SOLIDWORKS configuration
This VBA macro allows to change the options of the configuration regarding the processing in the Bill Of Materials
- Part Number Source
- Configuration name
- Document name
- Parent name
- Children Components Display
- Show
- Hide
- Promote
Macro can process active configuration only or all configurations
Configure the macro by changing its constants
Specify -1 for PART_NUMBER_SRC or CHILD_COMPS_DISP options to keep original values or new value to override
Const ALL_CONFIGS As Boolean = True 'True to process all configurations, False to process active configuration only
Const PART_NUMBER_SRC As Integer = swBOMPartNumberSource_e.swBOMPartNumber_ConfigurationName 'Part number source: -1 to keep as is or swBOMPartNumberSource_e.swBOMPartNumber_ConfigurationName, swBOMPartNumberSource_e.swBOMPartNumber_DocumentName or swBOMPartNumberSource_e.swBOMPartNumber_ParentName
Const CHILD_COMPS_DISP As Integer = swChildComponentInBOMOption_e.swChildComponent_Promote 'Display of components in BOM: -1 to keep as is or swChildComponentInBOMOption_e.swChildComponent_Show, swChildComponentInBOMOption_e.swChildComponent_Hide or swChildComponentInBOMOption_e.swChildComponent_Promote
Const ALL_CONFIGS As Boolean = True
Const PART_NUMBER_SRC As Integer = swBOMPartNumberSource_e.swBOMPartNumber_ConfigurationName
Const CHILD_COMPS_DISP As Integer = swChildComponentInBOMOption_e.swChildComponent_Promote
Dim swApp As SldWorks.SldWorks
Sub main()
Set swApp = Application.SldWorks
Dim swModel As SldWorks.ModelDoc2
Set swModel = swApp.ActiveDoc
If swModel Is Nothing Then
Err.Raise vbError, "", "Open document"
End If
If swModel.GetType() = swDocumentTypes_e.swDocDRAWING Then
Err.Raise vbError, "", "Drawings are not supported"
End If
If ALL_CONFIGS Then
Dim vConfNames As Variant
vConfNames = swModel.GetConfigurationNames
Dim i As Integer
For i = 0 To UBound(vConfNames)
Dim swConf As SldWorks.Configuration
Set swConf = swModel.GetConfigurationByName(CStr(vConfNames(i)))
SetConfigurationBomOptions swConf
Next
Else
SetConfigurationBomOptions swModel.ConfigurationManager.ActiveConfiguration
End If
End Sub
Sub SetConfigurationBomOptions(config As SldWorks.Configuration)
If CHILD_COMPS_DISP <> -1 Then
config.ChildComponentDisplayInBOM = CHILD_COMPS_DISP
End If
If PART_NUMBER_SRC <> -1 Then
config.BOMPartNoSource = PART_NUMBER_SRC
End If
End Sub