Makro zaznacza wszystkie istniejące wiersze w widoku

Witam

Chcę zaznaczyć wszystkie wiersze dodane do widoku, aby usunąć je później.

Na razie mogę usunąć, gdy znam numer linii (tutaj od 1 do 99), ale czy możemy upewnić się, że wymieniliśmy wszystkie istniejące linie, aby je później usunąć?

Poniżej znajduje się fragment kodu, który nowicjusz, którego próbuję zmodyfikować, aby następnie wstawić go do nieco bardziej złożonego makra.

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

 

Witam

Spróbuj użyć poniższego kodu, aby sprawdzić, czy to działa dla Ciebie:

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

 

Pozdrowienia

3 polubienia

Doskonale spełnia swoje zadanie! Bardzo dziękuję, chyba nie udałoby mi się skończyć tego makra bez Waszej pomocy.

Dla przypomnienia, co robi ta linia:

myModelView.FrameState = swWindowState_e.swWindowMaximized

 

Co do reszty, myślę, że zrozumiałem:

Sprawdzasz, czy w widoku jest więcej niż 0 istniejących linii, a następnie zapętlasz każdy wiersz i usuwasz go.

 

I bardzo  dziękuję d.roger , królowi makr! Jeśli mogę!

Witam

Zostawiłem wiersz, o którym mowa, w kodzie, ponieważ był on już częścią twojego kodu, ale jest bezużyteczny dla funkcji usuwania linii, pozwala ustawić okno oprogramowania planu na maksymalny wymiar (lub na minimalny wymiar, jeśli zamienisz "swWindowMaximized" na "swWindowMinimized").

Co do reszty, masz rację.

Pozdrowienia

1 polubienie

Tak właśnie myślałem! Jeszcze raz dziękuję.