Hallo zusammen,
ich würde gerne eine Makro erstellen mit dem ich in einer Baugruppe alle externen Referenzen der beinhalteten Teile brechen kann.
Aus diversen Seiten habe ich mir nun so ein Makro gebastelt. Dies funktioniert auch sehr gut, jedoch nur wenn keines der Bauteile unterdrückt ist.
Wie kann ich folgendes Makro erweitern dass es unterdrückte Teile/Baugruppen einfach überspringt?
Dim swApp As Object
Dim Part As Object
Dim AssemblyDoc As Object
Dim Component As Object
Dim ComponentList As Variant
Dim RootComponent As Object
Dim Antwort As Variant
Dim Name As String
Sub main()
' an SolidWorks anklinken und aktives Assembly holen
Set swApp = Application.SldWorks
Set AssemblyDoc = swApp.ActiveDoc
' Überprüfen ob irgendwas geöffnet ist
If AssemblyDoc Is Nothing Then
MsgBox "Kein Solidworks-Dokument geöffnet!", vbInformation, title
End
End If
' Überprüfen ob eine Baugruppe geöffnet ist
If AssemblyDoc.GetType() <> swDocASSEMBLY Then
MsgBox "Keine Baugruppe geöffnet!", vbInformation, title
End
End If
Antwort = MsgBox("Sollen wirklich alle externen Referenzen unterbrochen/gesperrt werden?" _
& vbCrLf & " " & vbCrLf & "Ja = Unterbrechen" _
& vbCrLf & " " & vbCrLf & "Nein = Sperren", vbYesNoCancel)
If Antwort = vbYes Then
' Root-Komponente des Assemblies als Ausgangspunkt festmachen
Set Configuration = AssemblyDoc.GetActiveConfiguration()
Set RootComponent = Configuration.GetRootComponent()
'Komponentenliste...
ComponentList = RootComponent.GetChildren()
Debug.Print "Anzahl der Komponenten:" & Str$(UBound(ComponentList))
For n = 0 To UBound(ComponentList)
Set Component = ComponentList(n)
Name = Component.Name2
Set Part = Component.GetModelDoc
Part.BreakAllExternalReferences
' Part.LockAllExternalReferences
Debug.Print Name
Next n
ElseIf Antwort = vbNo Then
' Root-Komponente des Assemblies als Ausgangspunkt festmachen
Set Configuration = AssemblyDoc.GetActiveConfiguration()
Set RootComponent = Configuration.GetRootComponent()
'Komponentenliste...
ComponentList = RootComponent.GetChildren()
Debug.Print "Anzahl der Komponenten:" & Str$(UBound(ComponentList))
For n = 0 To UBound(ComponentList)
Set Component = ComponentList(n)
Name = Component.Name2
Set Part = Component.GetModelDoc
' Part.BreakAllExternalReferences
Part.LockAllExternalReferences
Debug.Print Name
Next n
End If
End Sub
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP