En controleer indien mogelijk of zone 2 leeg is of niet na het filter. Als het leeg is, wordt het filter verwijderd. Indien niet leeg, maak dan de msgbox leeg
Het belangrijkste is om een stukje gegevens uit het filter te kunnen toevoegen of verwijderen, de verificatie (leven of niet leeg) blijft secundair. Ik heb deze functie gevonden zonder echt een voorbeeld te hebben:
Ik zag deze code, maar voor mij gebruikt het niet het filter en op grote assemblages zoals ik, denk ik dat het zoeken veel langzamer zal zijn. Als ik echt geen keus heb, zou ik ervoor gaan. Maar onze oplossing via het filter lijkt erg snel door het met de hand te typen? Ik wil deze zoekopdracht gewoon automatiseren door deze in een andere macro te integreren. En indien mogelijk voeg dan de zoekopdracht toe: eenmaal gefilterd als=0 geen bericht en indien >0 bericht
Technisch gezien ziet het gebruik van de fitre er als volgt uit:
Sub FiltrerFeatureManager()
Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim searchText As String
' Initialiser l'application SolidWorks
Set swApp = Application.SldWorks
' Obtenir le modèle actif
Set swModel = swApp.ActiveDoc
' Vérifier si un document est ouvert
If swModel Is Nothing Then
MsgBox "Aucun document ouvert."
Exit Sub
End If
' Définir le texte de recherche
searchText = "Rondelle"
' Définir le texte de filtrage dans le FeatureManager
swModel.Extension.FeatureManagerFilterString = searchText
' Forcer la mise à jour de l'interface utilisateur
swModel.GraphicsRedraw2
End Sub
Het werkt, in dit voorbeeld worden alleen de " ringen " gefilterd. Alleen is er een probleem (en niet het minste), het lukt me niet om de filtratie te " annuleren "...
Option Explicit
Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim swModelDocExt As SldWorks.ModelDocExtension
Dim value As String
Dim value2 As String
Sub main()
Set swApp = Application.SldWorks
Set swModel = swApp.ActiveDoc
Set swModelDocExt = swModel.Extension
value = "Tôle passage réduit"
'value = swModelDocExt.FeatureManagerFilterString
swModelDocExt.FeatureManagerFilterString = value
value2 = swModelDocExt.FeatureManagerFilterString
Debug.Print value2
swModelDocExt.FeatureManagerFilterString = ""
'swModel.ClearSelection2 True
End Sub
Het filter is van toepassing op het grafische venster (CAD-gedeelte), alleen het gefilterde deel verschijnt in dit grafische gebied. Aan de andere kant blijft de functiebeheerder vast. (volledige boomstructuur van het geheel en niets zichtbaar in het filter. Bug in mijn 2023 SP05-versie of normaal gedrag? Of slechte functie?
@Maclane een filter te annuleren, moet u " " in waarde of searchtext=" " voor uw code invoeren
Opmerking: Ik heb echt moeite om de Visiativ-logica te begrijpen, die bestaat uit het verbergen van hun tools, of zelfs niet meer standaard te installeren... Het moedigt de consumptie niet aan...
er kan een ander mogelijk pad zijn door door de geavanceerde selecties te gaan. (vaak vergeten optie van Solidworks).
@Maclane Ja, ook voor mij duurt het " 2 uur " om het uitzicht op te frissen! Voor het gebruik van TreeManager, niet mogelijk wil ik dit toevoegen in een bestaande macro. Als ik via een ext hulpprogramma in SW de ontwerpers zullen het niet systematisch doen en daarachter genereert fouten onderdelen die moeten worden vervangen niet gedetecteerd. Voor het beperkte aantal hulpprogramma's denk ik dat het niet te wijten is aan Visiativ, maar aan Windows of Dassault, ik weet niet wie deze beperking heeft gemaakt (cf-hotline) Voor de geavanceerde selectie heb ik zojuist getest dat het werkt voor onderdelen in de assemblage, maar in een subassemblage vindt het het onderdeel niet meer. Het leek perfect!