Nicht zu löschen

Hallo
Ich habe ein funktionierendes Makro von 98 % und trockne für die anderen 2 % ein wenig.
Dieses Makro fügt automatisch Markierungen am Ende der Biegelinie, auf einer Markierungsschicht und in Gelb hinzu.
Das Problem kommt von einem Teil, wenn die Größe des Teils reduziert wird, kommt die Markierung aus dem Teil.
Durch einen Neustart des Makros sollen die Markierungslinien gelöscht werden, außerhalb der Zeit (selten) wird die Markierung nicht gelöscht.
Und eine Meldung wird im Debug-Modus am oberen Rand des Fensters angezeigt:
" Keine dieser Entitäten kann gelöscht werden "


Hier ist der Teil meines Codes, um das Markup zu entfernen:

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

Und wenn nötig ein Beispiel für MEP, das nicht gut funktioniert (sw 2020)
Wenn jemand einen Hinweis hat, habe ich mich zu lange mit dem Thema beschäftigt!:grin:
PI_200416-Test. SLDPRT (580.9 KB)
PI_200416-Test. SLDDRW (287.8 KB)

Hallo

Versuchen Sie, dies zu ersetzen:

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

Damit:

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

Bearbeiten: Deklarieren Sie auch Variablen mit dem richtigen Typ:

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

Etc

1 „Gefällt mir“

Für die Variablen waren sie global, daher die Auslassung in meinem (Teil-)Code:
image
Im Übrigen scheint es perfekt zu funktionieren, in der Tat scheint die Tatsache, dass die Ansicht aktiviert wird, viel besser!
Vielen Dank @Cyril.f .
Wie haben Sie für meine Kultur und zum Zweck meiner kontinuierlichen Verbesserung gedebuggt?

Für das Debuggen habe ich debug.print für den Namen der Ansicht und den Namen des Sketches hinzugefügt, um zu sehen, ob die Auswahl gut war.
Was mich in Alarmbereitschaft versetzt hat, ist, dass es während des Schritt-für-Schritt-Prozesses dazu neigte, das Blatt im Baum anstelle der Ansicht auszuwählen (wahrscheinlich im Zusammenhang mit dieser Zeile):

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

Das Löschen hat nichts geändert, ich habe mich dann daran erinnert, dass die Funktion swView.GetNExtView die Ansicht eines SW-Standpunkts nicht aktiviert hat, also erzwingen wir durch die Aktivierung, dass die Auswahl auf der richtigen Ebene ist (es kann Linien außerhalb der Ansichten und der Grundkarte in einer Zeichnung geben).

2 „Gefällt mir“

Und wenn man bedenkt, dass dies das ist, was ich im Allgemeinen empfehle (debug.print hinzufügen), ist es manchmal der schlechteste Schuhmacher! :rofl: :rofl: :rofl:

Danke für die Hilfe und Erklärung!

1 „Gefällt mir“