Onmogelijk te verwijderen

Hallo
Ik heb een macro van 98% en ik droog een beetje voor de andere 2%.
Deze macro voegt automatisch markeringen toe aan het einde van de buiglijn, op een markeringslaag en in geel.
Het probleem komt van een onderdeel, wanneer de grootte van het onderdeel wordt verkleind, komt de markering uit het onderdeel.
Door de macro opnieuw te starten, wordt verondersteld de markeringslijnen te wissen, buiten de tijd (zelden) wordt de markering niet gewist.
En er verschijnt een bericht in de foutopsporingsmodus bovenaan het venster:
" Geen van deze entiteiten kan worden verwijderd "


Hier is het deel van mijn code om de opmaak te verwijderen:

Sub suppressMarquage()
    Dim swModel                 As Object
    Dim vSkSegArr               As Variant
    Dim vSkSeg                  As Variant
    Dim swSkSeg                 As SldWorks.SketchSegment
    Dim boolstatus              As Boolean
    Dim longstatus              As Long, longwarnings As Long
    Dim Numberline              As Integer
    Dim lNumSegments            As Long
    Dim myModelView             As Object
    
'On supprime le marquage existant
    Set swApp = Application.SldWorks
    Set swModel = swApp.ActiveDoc
    Set swDraw = swModel
    
    Set myModelView = swModel.ActiveView
    myModelView.FrameState = swWindowState_e.swWindowMaximized
    Set swView = swDraw.GetFirstView.GetNextView


    lNumSegments = swView.GetLineCount2(1)

    If lNumSegments > 0 Then
        Set swSketch = swView.GetSketch
        vSkSegArr = swSketch.GetSketchSegments
        For Each vSkSeg In vSkSegArr
            Set swSkSeg = vSkSeg
            boolstatus = swModel.Extension.SelectByID2(swSkSeg.GetName, "SKETCHSEGMENT", 0, 0, 0, False, 0, Nothing, 0)
            swModel.EditDelete
        Next vSkSeg
    End If
    
'On supprime l'annotation marquage
    Dim bFind                       As Boolean
    Dim swNote                      As SldWorks.Note
    Dim swAnn                       As SldWorks.Annotation
    Dim bret                        As Boolean
    Set swNote = swView.GetFirstNote
    Do While Not swNote Is Nothing
                            bFind = False
                            Debug.Print "Note:" & swNote.GetText
                            If swNote.GetText Like "*Marquage laser*" Then
                                bFind = True
                                Debug.Print "bFind:" & bFind
                                Set swAnn = swNote.GetAnnotation
                                bret = swAnn.Select2(True, 0)
                                Set swNote = swNote.GetNext
                                swModel.EditDelete
                                
                            End If
        If Not bFind Then Set swNote = swNote.GetNext
    Loop
End Sub

En desnoods een voorbeeld van MEP die niet goed werkt (sw 2020)
Als iemand een voorsprong heeft, ben ik al te lang aan het opdrogen over het onderwerp!:grin:
PI_200416-toets. SLDPRT (580.9 KB)
PI_200416-test. SLDDRW (287.8 KB)

Hallo

Probeer dit te vervangen:

    Set myModelView = swModel.ActiveView
    myModelView.FrameState = swWindowState_e.swWindowMaximized
    Set swView = swDraw.GetFirstView.GetNextView

Hierdoor:

    Set myModelView = swModel.ActiveView
    myModelView.FrameState = swWindowState_e.swWindowMaximized
    Set swView = swDraw.GetFirstView
    Set swView = swView.GetNextView
    boolstatus = swDraw.ActivateView(swView.GetName2)

Edit: Declareer ook variabelen met het juiste type:

    Dim swModel                 As SldWorks.ModelDoc2
    Dim swDraw                  As SldWorks.DrawingDoc
    Dim swView                  As SldWorks.View

Enz

1 like

Voor de variabelen waren ze globaal, vandaar de weglating in mijn (gedeeltelijke) code:
image
Voor de rest lijkt het perfect functioneel, sterker nog, het feit dat het uitzicht wordt geactiveerd lijkt veel beter!
Dank je wel @Cyril_f .
Voor mijn cultuur en voor het doel van mijn continue verbetering, hoe heb je alsjeblieft gedebugd?

Dus voor de debug heb ik debug.print toegevoegd aan de naam van de weergave en de naam van de schets om te zien of de selecties goed waren.
Wat me alert maakte, is dat tijdens het stapsgewijze proces de neiging had om het blad in de boom te selecteren in plaats van de weergave (waarschijnlijk gerelateerd aan deze regel:

Set myModelView = swModel.ActiveView
    myModelView.FrameState = swWindowState_e.swWindowMaximized

Het verwijderen veranderde niets, ik herinnerde me toen dat de swView.GetNExtView-functie de weergave van een SW-gezichtspunt niet activeerde, dus door het te activeren, dwingen we de selectie om op het juiste niveau te zijn (er kunnen lijnen buiten de weergaven en de basiskaart in een tekening zijn).

2 likes

En dan te bedenken dat dit is wat ik in het algemeen adviseer (debug.print toevoegen), het is soms de slechtst geschoeide schoenmaker! :rofl: :rofl: :rofl:

Bedankt voor de hulp en uitleg!

1 like