Makroauswahl aller vorhandenen Zeilen in einer Ansicht

Hallo

Ich möchte alle Linien auswählen, die einer Ansicht hinzugefügt wurden, um sie später zu löschen.

Im Moment kann ich löschen, wenn ich die Nummer der Zeile kenne (hier von 1 bis 99), aber können wir sicherstellen, dass alle vorhandenen Zeilen aufgelistet werden, um sie später zu löschen?

Unten sehen Sie den Codeausschnitt, den der Anfänger, den ich zu ändern versuche, ändert, um ihn dann in ein etwas komplexeres Makro einzufügen.

Dim swApp As Object

Dim Part As Object
Dim boolstatus As Boolean
Dim longstatus As Long, longwarnings As Long
Dim Numberline As Integer



Sub main()
Numberline = 0
Set swApp = Application.SldWorks

Set Part = swApp.ActiveDoc
Dim myModelView As Object
Set myModelView = Part.ActiveView
myModelView.FrameState = swWindowState_e.swWindowMaximized
boolstatus = Part.ActivateView("Vue de mise en plan1")


  
  Do
    Numberline = Numberline + 1
    'boolstatus = Part.Extension.SelectByID2("Line", "SKETCHSEGMENT", 0, 0, 0, False, 0, Nothing, 0)
    boolstatus = Part.Extension.SelectByID2("Line" & Numberline, "SKETCHSEGMENT", 0, 0, 0, False, 0, Nothing, 0)
    Part.EditDelete
  Loop While Numberline < 100



End Sub

 

Hallo

Versuchen Sie mit dem folgenden Code, um zu sehen, ob dies für Sie funktioniert:

Option Explicit

Dim swApp As Object
Dim Part As Object
Dim swDraw As SldWorks.DrawingDoc
Dim swView As SldWorks.View
Dim swSketch As SldWorks.Sketch
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

Sub main()
    Set swApp = Application.SldWorks
    Set Part = swApp.ActiveDoc
    Set swDraw = Part
    Dim myModelView As Object
    Set myModelView = Part.ActiveView
    myModelView.FrameState = swWindowState_e.swWindowMaximized
    boolstatus = Part.ActivateView("Vue de mise en plan1")
    
    Set swView = swDraw.ActiveDrawingView

    lNumSegments = swView.GetLineCount2(1)

    If lNumSegments > 0 Then
        Set swSketch = swView.GetSketch
        vSkSegArr = swSketch.GetSketchSegments
        For Each vSkSeg In vSkSegArr
            Set swSkSeg = vSkSeg
            boolstatus = Part.Extension.SelectByID2(swSkSeg.GetName, "SKETCHSEGMENT", 0, 0, 0, False, 0, Nothing, 0)
            Part.EditDelete
        Next vSkSeg
    End If
End Sub

 

Herzliche Grüße

3 „Gefällt mir“

Macht die Arbeit perfekt! Vielen Dank, ich glaube nicht, dass ich es ohne Ihre Hilfe geschafft hätte, dieses Makro zu beenden.

Nur fürs Protokoll, was macht diese Zeile:

myModelView.FrameState = swWindowState_e.swWindowMaximized

 

Im Übrigen glaube ich verstanden zu haben:

Sie prüfen, ob mehr als 0 Zeilen in der Ansicht vorhanden sind, dann wiederholen Sie jede Zeile und löschen sie.

 

Und vielen Dank , d.roger , der König der Makros! Wenn ich darf!

Hallo

Ich habe die fragliche Zeile im Code belassen, weil sie bereits Teil Ihres Codes war, aber für die Funktion zum Löschen von Zeilen unbrauchbar ist, ermöglicht es Ihnen, das SW-Fenster des Plans auf die maximale Dimension festzulegen (oder auf die minimale Dimension, wenn Sie "swWindowMaximized" durch "swWindowMinimized" ersetzen).

Im Übrigen haben Sie alles richtig gemacht.

Herzliche Grüße

1 „Gefällt mir“

Das dachte ich mir! Nochmals vielen Dank.