Normalerweise sollte der folgende Code die Anforderung erfüllen.
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
Abhängig von der Anzahl der zu generierenden Konfigurationen ist nicht unbedingt ein Makro erforderlich. Wählen Sie im Fenster zum Öffnen der Baugruppendatei die ASM aus, klicken Sie auf "Konfiguration" und wählen Sie "Erweitert"
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 meinem Fall generiere ich jedoch keine Konfiguration, aber ich möchte, dass eine der Komponenten den gleichen Konfigurationsnamen wie die Assembly hat, in der sie sich befindet.
Ich benötige ein Makro, das wie im Screenshot unten die Komponente basierend auf den Konfigurationen der Assembly konfiguriert.
Wir sollten uns auf den Inhalt der Versammlung beschränken und uns nicht mehr auf die Auswahl verlassen.
Auf der anderen Seite ist etwas mehr Verarbeitung erforderlich, um zu überprüfen, ob die Datei eine Konfiguration sowie andere spezielle Fälle im Zusammenhang mit Ihren Assemblys enthält. Etwas komplexer.
Okay, Ihre Methode funktioniert bereits sehr gut, wir danken Ihnen herzlich. Du hast uns wertvolle Zeit gespart und ich werde dein Makro studieren , um weitere zu erstellen.
Das einzige "Tutorial" ist die Online-Hilfe der API.
Dann gibt es noch den Makro-Recorder (eingeschränkt, weil er nicht immer die neuesten API-Funktionen verwendet und nur "einfachen" Code macht) und die Solidworks-Foren, die zu diesen Themen eine Goldgrube sind (allerdings oft auf Englisch).