| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für SOLIDWORKS |
| |
| Technikerschüler der staatlichen Feintechnikschule Schwenningen zu Besuch bei SolidCAM GmbH in Schramberg |
Autor
|
Thema: Inaktive Blöcke löschen (817 mal gelesen)
|
Pete85 Mitglied
Beiträge: 156 Registriert: 09.05.2016
|
erstellt am: 13. Jul. 2021 13:45 <-- editieren / zitieren --> Unities abgeben:
|
deckelmaho Mitglied Konstrukteur
Beiträge: 239 Registriert: 03.03.2020 SolidWorks 2023 SP5 Windows 10 64bit Office 2019
|
erstellt am: 13. Jul. 2021 14:52 <-- editieren / zitieren --> Unities abgeben: Nur für Pete85
|
Pete85 Mitglied
Beiträge: 156 Registriert: 09.05.2016
|
erstellt am: 13. Jul. 2021 15:17 <-- editieren / zitieren --> Unities abgeben:
|
deckelmaho Mitglied Konstrukteur
Beiträge: 239 Registriert: 03.03.2020 SolidWorks 2023 SP5 Windows 10 64bit Office 2019
|
erstellt am: 13. Jul. 2021 17:55 <-- editieren / zitieren --> Unities abgeben: Nur für Pete85
Ich bin gerade etwas in Eile, daher hier der Code. Der muss aber noch in VBA geändert werden. Der ist aus dem SWXHelper kopiert. Die verwendeten Methoden, hast du ja damit... Code:
Private Sub UngenutzteLoeschen() swApp = GetTheCurrentSolidworksInstance() swModelDoc = swApp.ActiveDoc swSketchManager = swModelDoc.SketchManager Dim swFeat As Feature Dim swSketchBlockDef As SketchBlockDefinition Dim vSketchBlockDefs As Object Dim vSketchBlockDef As Object Dim retval As Object
vSketchBlockDefs = swSketchManager.GetSketchBlockDefinitions If Not IsNothing(vSketchBlockDefs) Then For Each vSketchBlockDef In vSketchBlockDefs swSketchBlockDef = vSketchBlockDef 'Debug.Print "Anzahl der Blockinstanzen: " & swSketchBlockDef.GetInstanceCount swFeat = swSketchBlockDef.GetFeature If swSketchBlockDef.GetInstanceCount = 0 Then retval = swFeat.Select2(False, -1) retval = swModelDoc.DeleteSelection(False) 'Debug.Print swFeat.Name & " wurde gelöscht" Else 'Debug.Print swFeat.Name & " wird nicht gelöscht" End If Next End If End Sub
------------------ HOMEPAGE | SWXTools.de - SWXHelper für SOLIDWORKS KONTAKT | support@swxtools.de FACEBOOK | facebook.com/SWXHelper TWITTER | twitter.com/SWXTools Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Pete85 Mitglied
Beiträge: 156 Registriert: 09.05.2016
|
erstellt am: 14. Jul. 2021 07:26 <-- editieren / zitieren --> Unities abgeben:
Moin... ich versteh da gerade was nicht... bei Code: If Not IsNothing(vSketchBlockDefs) Then For Each vSketchBlockDef In vSketchBlockDefs swSketchBlockDef = vSketchBlockDef
bringt der Kompiler mir das Sub oder Funktion nicht definiert ist.
Markiert miur den Befehl IsNothing. muss ich da noch einen Verweis definieren? Vielen Dank Gruß Pete
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
deckelmaho Mitglied Konstrukteur
Beiträge: 239 Registriert: 03.03.2020 SolidWorks 2023 SP5 Windows 10 64bit Office 2019
|
erstellt am: 14. Jul. 2021 07:52 <-- editieren / zitieren --> Unities abgeben: Nur für Pete85
|
Pete85 Mitglied
Beiträge: 156 Registriert: 09.05.2016
|
erstellt am: 14. Jul. 2021 13:12 <-- editieren / zitieren --> Unities abgeben:
Servus, also irgendwie ist da der Wurm drin. "MyObject" ist jetzt "Leer" und ich bekomme einen Laufzeitfehler '424' ich seh es gerade nicht was nicht passt...
Code:
Sub UngenutzteLoeschen() Dim swApp As SldWorks.SldWorks Dim swFeat As Feature Dim swSketchBlockDef As SldWorks.SketchBlockDefinition Dim vSketchBlockDefs As Variant Dim vSketchBlockDef As Variant Dim swSketchManager As Variant Dim retval As Object Dim swmodeldoc As SldWorks.ModelDoc2 Set swApp = Application.SldWorks Set swmodeldoc = swApp.ActiveDoc Set swSketchManager = swmodeldoc.SketchManager vSketchBlockDefs = swSketchManager.GetSketchBlockDefinitions If Not IsNothing(vSketchBlockDefs) Then For Each vSketchBlockDef In vSketchBlockDefs swSketchBlockDef = vSketchBlockDef 'Debug.Print "Anzahl der Blockinstanzen: " & swSketchBlockDef.GetInstanceCount swFeat = swSketchBlockDef.GetFeature If swSketchBlockDef.GetInstanceCount = 0 Then retval = swFeat.Select2(False, -1) retval = swmodeldoc.DeleteSelection(False) 'Debug.Print swFeat.Name & " wurde gelöscht" Else 'Debug.Print swFeat.Name & " wird nicht gelöscht" End If Next End If End Sub Public Function IsNothing(ByRef MyObject As Variant) As Boolean IsNothing = (MyObject Is Nothing) End Function
Ich hab den unteren Teil nach "If Not is Nothing" noch nicht umgeschrieben. bin ja noch nicht so weit gekommen :-)
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bk.sc Ehrenmitglied V.I.P. h.c. Konstrukteur Sondermaschinenbau
Beiträge: 2776 Registriert: 18.07.2012 -Solid Works 2019 SP5 -Pro Engineer WF 3
|
erstellt am: 14. Jul. 2021 14:03 <-- editieren / zitieren --> Unities abgeben: Nur für Pete85
Hallo Pete, hier der Code auf VBA umgemünst, an stelle auf "Nothing" (IsNothing) prüfe ich das Arry auf "Empty" (IsEmpty). Code: Sub Main() Set swApp = Application.SldWorks Set swModelDoc = swApp.ActiveDoc Set swSketchManager = swModelDoc.SketchManager Dim swFeat As Feature Dim swSketchBlockDef As SketchBlockDefinition Dim vSketchBlockDefs As Variant Dim vSketchBlockDef As Variant Dim retval As Boolean
vSketchBlockDefs = swSketchManager.GetSketchBlockDefinitions If Not IsEmpty(vSketchBlockDefs) Then For Each vSketchBlockDef In vSketchBlockDefs Set swSketchBlockDef = vSketchBlockDef 'Debug.Print "Anzahl der Blockinstanzen: " & swSketchBlockDef.GetInstanceCount Set swFeat = swSketchBlockDef.GetFeature If swSketchBlockDef.GetInstanceCount = 0 Then retval = swFeat.Select2(False, -1) retval = swModelDoc.DeleteSelection(False) 'Debug.Print swFeat.Name & " wurde gelöscht" Else 'Debug.Print swFeat.Name & " wird nicht gelöscht" End If Next End If End Sub
Gruß Bernd ------------------ --- Man muß nicht alles wissen, man muß nur wissen wo es steht --- Staatlich anerkannte Deutschniete Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
deckelmaho Mitglied Konstrukteur
Beiträge: 239 Registriert: 03.03.2020 SolidWorks 2023 SP5 Windows 10 64bit Office 2019
|
erstellt am: 14. Jul. 2021 14:16 <-- editieren / zitieren --> Unities abgeben: Nur für Pete85
Der Variant möchte IsEmpty() statt IsNothing. So sollte es funktionieren... Code:
Sub UngenutzteLoeschen() Dim swApp As SldWorks.SldWorks Dim swFeat As Feature Dim swSketchBlockDef As Object Dim vSketchBlockDefs As Variant Dim vSketchBlockDef As Variant Dim swSketchManager As Variant Dim retval As Variant Dim swmodeldoc As SldWorks.ModelDoc2 Set swApp = Application.SldWorks Set swmodeldoc = swApp.ActiveDoc Set swSketchManager = swmodeldoc.SketchManager vSketchBlockDefs = swSketchManager.GetSketchBlockDefinitions If Not IsEmpty(vSketchBlockDefs) Then For Each vSketchBlockDef In vSketchBlockDefs Set swSketchBlockDef = vSketchBlockDef 'Debug.Print "Anzahl der Blockinstanzen: " & swSketchBlockDef.GetInstanceCount Set swFeat = swSketchBlockDef.GetFeature If swSketchBlockDef.GetInstanceCount = 0 Then retval = swFeat.Select2(False, -1) retval = swmodeldoc.DeleteSelection(False) 'Debug.Print swFeat.Name & " wurde gelöscht" Else 'Debug.Print swFeat.Name & " wird nicht gelöscht" End If Next End If End Sub
EDIT:Da war ich wohl zu spät ------------------ HOMEPAGE | SWXTools.de - SWXHelper für SOLIDWORKS KONTAKT | support@swxtools.de FACEBOOK | facebook.com/SWXHelper TWITTER | twitter.com/SWXTools
[Diese Nachricht wurde von deckelmaho am 14. Jul. 2021 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Pete85 Mitglied
Beiträge: 156 Registriert: 09.05.2016
|
erstellt am: 14. Jul. 2021 14:46 <-- editieren / zitieren --> Unities abgeben:
Vielen Dank!!! das mit isEmpty kannte ich schon... macht auch sinn. hab ja eigentlich gesehen, das der Wert Leer ist... danke auch fürs umschreiben... Ich werde es auf jedenfall nachvollziehen. in Zeichnungen hab ich noch ca. garnichts programmiert... bleibt also spannend.. Gruß Pete Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
deckelmaho Mitglied Konstrukteur
Beiträge: 239 Registriert: 03.03.2020 SolidWorks 2023 SP5 Windows 10 64bit Office 2019
|
erstellt am: 14. Jul. 2021 15:04 <-- editieren / zitieren --> Unities abgeben: Nur für Pete85
|