Re: Hallo allemaal!
Het beste antwoord zal dus aan @Konti worden toegeschreven: zelfs als ik in veel andere antwoorden elementen heb gevonden om me te ontgrendelen, is het zijn antwoord dat me het meest in staat stelde om vooruit te komen (en dit ondanks het feit dat zijn code in C# is geschreven).
Dank je wel @Konti !
Hier is de oplossing in detail:
Inderdaad, zoals de @Konti code laat zien, is het de foutcode 51 swSketchErrorExtRefFail die moet worden gebruikt.
Wanneer een onderdeel wordt verwijderd zonder de bijbehorende beperkingen te verwijderen, krijgen de beperkingsverwijzingen een vlag **External**

Om de een of andere reden was het eerste idee dat ik had om te controleren of de component die was gekoppeld aan de wiebelige beperkingsreferentie-entiteit niet werkte: er was nog steeds een bestandsnaam aan gekoppeld, maar die had niets te maken met de oorspronkelijke. Kort! Onbegrijpelijk.
De voorwaarde om dit te laten werken is dat de systeemoptie Ontbrekende beperkingsverwijzingen als fouten behandelen, moet worden gecontroleerd (juist om code 51 aan de beperking te koppelen).
VOORZICHTIG!! Als een bestand ontbreekt (d.w.z. SW kan het niet vinden), wordt het weergegeven als verwijderd in de structuur en voor alle configuraties als die er zijn, en de beperkingen die eraan verbonden zijn, gaan ook terug naar foutcode 51; Het is daarom noodzakelijk om na te denken over het oplossen/vinden van deze componenten voordat u de macro exploiteert.
Het andere probleem dat ik tegenkwam, heeft te maken met de functie van het groeperen van beperkingen op status (*Met dank aan @Sylk voor het laten verschijnen van deze weergave-optie in een van zijn berichten):
Als de beperking een subfunctie is van de functie Standaardbeperkingen in de structuur van een assembly, bevinden de gebruikersmappen of mappen voor automatische groepering zich op hetzelfde niveau en moeten ze worden verwijderd voordat de beperking wordt geanalyseerd.
Daar ga je! Nogmaals bedankt allemaal.
Hieronder staat mijn code:
Option Explicit
Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim swModelDocExt As SldWorks.ModelDocExtension
Dim swSelMgr As SldWorks.SelectionMgr
Dim swFeat As SldWorks.Feature
Dim swMateGroup As SldWorks.Feature
Dim swSubFolder As SldWorks.Feature
Dim swMateFeat As SldWorks.Feature
Dim swSubFeat As SldWorks.Feature
Dim swMate As IMate2
Dim swComp As SldWorks.Component2
Dim swMateEnt(2) As SldWorks.MateEntity2
Dim fileName As String
Dim Error As Long
Dim IsWarning As Boolean
Dim i As Long
Dim DeleteOption As Long
Dim status As Boolean
Dim Append As Boolean
Dim Mark As Integer
Dim List As Boolean
Sub main()
Set swApp = Application.SldWorks
Set swModel = swApp.ActiveDoc
Set swSelMgr = swModel.SelectionManager
Set swModelDocExt = swModel.Extension
'Get the first feature in the assembly
Set swFeat = swModel.FirstFeature
'Iterate over features in FeatureManager design tree
Do While Not swFeat Is Nothing
If "MateGroup" = swFeat.GetTypeName Then
Set swMateGroup = swFeat
Exit Do
End If
Set swFeat = swFeat.GetNextFeature
Loop
Debug.Print " " & swMateGroup.Name
Debug.Print ""
Set swSubFeat = swMateGroup.IGetFirstSubFeature
'iterate over subfeatures (Mate or folders)
Do While Not swSubFeat Is Nothing
If "FtrFolder" = swSubFeat.GetTypeName Then
'--------------------------------------------------------------------
Debug.Print "swSubFeat TypeName: " & swSubFeat.GetTypeName _
& ", Name: " & swSubFeat.Name
'--------------------------------------------------------------------
GoTo Line1
ElseIf "GroupedMatesFolder" = swSubFeat.GetTypeName Then
'--------------------------------------------------------------------
Debug.Print "swSubFeat TypeName: " & swSubFeat.GetTypeName _
& ", Name: " & swSubFeat.Name
'--------------------------------------------------------------------
GoTo Line1
End If
'MsgBox swSubFeat.GetTypeName
Set swMate = swSubFeat.GetSpecificFeature2
If Not swMate Is Nothing Then
Error = swSubFeat.GetErrorCode2(IsWarning)
' Error 51 ?
If Error = 51 Then List = swSubFeat.Select2(True, 0)
End If
Line1:
Set swSubFeat = swSubFeat.IGetNextSubFeature
Loop
'Delete List
' To delete absorbed features, use enum swDeleteSelectionOptions_e.swDelete_Absorbed
' To delete children features, use enum swDeleteSelectionOptions_e.swDelete_Children
' To keep absorbed features and children features, set DeleteOption = 0
DeleteOption = swDeleteSelectionOptions_e.swDelete_Absorbed
'DeleteOption = swDeleteSelectionOptions_e.swDelete_Children
'DeleteOption = 0
'DeleteOption =swDeleteSelectionOptions_e.swDelete_Absorbed + swDeleteSelectionOptions_e.swDelete_Children
status = swModelDocExt.DeleteSelection2(DeleteOption)
End Sub