Normaal gesproken zou de onderstaande code aan de behoefte moeten voldoen.
Sub main()
Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim swConfMgr As SldWorks.ConfigurationManager
Dim swSelMgr As SldWorks.SelectionMgr
Dim swChildComp As SldWorks.Component2
Dim sConf As String
Dim sChildConf As String
Set swApp = CreateObject("SldWorks.Application")
Set swModel = swApp.ActiveDoc
Set swSelMgr = swModel.SelectionManager
Set swConfMgr = swModel.ConfigurationManager
sConf = swConfMgr.ActiveConfiguration.Name
Set swChildComp = swSelMgr.GetSelectedObject6(1, -1)
sChildConf = swChildComp.ReferencedConfiguration
If sChildConf <> sConf Then
swChildComp.ReferencedConfiguration = sConf
swModel.EditRebuild3
End If
End Sub
Afhankelijk van het aantal configuraties dat moet worden gegenereerd, is er niet per se een macro nodig. In het venster om het assemblagebestand te openen, kiest u de asm, klikt u op "Configuratie", kiest u "geavanceerd"
Sub main()
Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim swConfMgr As SldWorks.ConfigurationManager
Dim swSelMgr As SldWorks.SelectionMgr
Dim swChildComp As SldWorks.Component2
Dim sConf As String
Dim sChildConf As String
Dim boolstatus As Boolean
Set swApp = CreateObject("SldWorks.Application")
Set swModel = swApp.ActiveDoc
Set swSelMgr = swModel.SelectionManager
Set swConfMgr = swModel.ConfigurationManager
vConfigNameArr = swModel.GetConfigurationNames
For Each vConfigName In vConfigNameArr
Set swConfig = swModel.GetConfigurationByName(vConfigName)
sConf = vConfigName
Set swChildComp = swSelMgr.GetSelectedObject6(1, -1)
swModel.ShowConfiguration2 (vConfigName)
boolstatus = swModel.Extension.SelectByID2(swChildComp.GetSelectByIDString, "COMPONENT", 0, 0, 0, False, 0, Nothing, 0)
Set swChildComp = swSelMgr.GetSelectedObject6(1, -1)
sChildConf = swChildComp.ReferencedConfiguration
If sChildConf <> sConf Then
swChildComp.ReferencedConfiguration = sConf
swModel.EditRebuild3
End If
Next
End Sub
In mijn geval genereer ik echter geen configuratie, maar wil ik dat een van de componenten dezelfde configuratienaam heeft als de assemblage waarin deze zich bevindt.
Ik heb een macro nodig die, zoals de onderstaande schermafbeelding, het onderdeel configureert op basis van de configuraties van de assembly.
We moeten ons afsluiten bij de inhoud van de vergadering en niet langer vertrouwen op de selectie.
Aan de andere kant vereist het iets meer verwerking om te controleren of het bestand een configuratie bevat plus een ander specifiek geval met betrekking tot uw assemblages. Een beetje complexer.
Dan is er nog de macrorecorder (beperkt omdat hij niet altijd de nieuwste API-functies gebruikt en alleen "eenvoudige" code doet) en de Solidworks-forums die een goudmijn zijn over deze onderwerpen (vaak wel in het Engels).