Word VBA: Удалить строки в таблице с помощью макроса.

Автор lapin9126, 24 мая 2017, 16:39

lapin9126

В недрах интернета нашел макрос, который удаляет строки таблицы, содержащие определенные данные, в конкретном случае текст "Удалить".
Как его "допилить" чтобы удаление начиналась с определенной строки и до конца таблицы (допустим пропустить 4 строки от начала таблицы)? Может есть альтернативные способы?

Спойлер
Sub test_2()
Dim r As Range, s As Range
Application.ScreenUpdating = False
Set r = ActiveDocument.Range
Do
  With r.Find
    .ClearFormatting
    .text = "Удалить" '<<< текст для поиска
    .Replacement.text = ""
    .Forward = True
    .Wrap = wdFindStop
    .Format = False
    .MatchCase = False
    .MatchWholeWord = False
    .MatchWildcards = False
    .MatchSoundsLike = False
    .MatchAllWordForms = False
    If .Execute Then
      If r.Information(wdWithInTable) Then
        Set s = r.Rows(1).Range
        s.Collapse wdCollapseEnd
        r.Rows(1).Delete
        Set r = ActiveDocument.Range(s.Start)
      Else
        r.Collapse wdCollapseEnd
        Set r = ActiveDocument.Range(r.Start)
      End If
    Else: Exit Do
    End If
  End With
Loop
Application.ScreenUpdating = True
End Sub
[свернуть]

Администратор

Выложите файл-пример.
Вместо Find в вашем случае проще использовать цикл по строкам таблицы. Макрос смотрит, есть ли в ячейке нужный текст, и удаляет его. С Find такое тяжелее сделать. Find просто быстрее, чем цикл по большому кол-ву элементов. Если строк мало, то цикл по строкам подойдёт.

lapin9126

В документе есть таблица (она одна), первые две строки - "шапка" таблицы, далее в таблице повторяется вторая строка из "шапки" их надо удалить.

Администратор

Макрос
Sub Макрос()

    Dim tbl As Table, i As Long
   
   
    '1. Отключение монитора (может это ускорит макрос и не будет мерцать).
    Application.ScreenUpdating = False
   
    '2. Присваиваем таблице имя "tbl".
    Set tbl = ActiveDocument.Tables(1)
   
    '3. Цикл по строкам таблицы с последней по четвёртую.
    For i = tbl.Rows.Count To 4 Step -1
        ' Если в текущей ячейке в столбце 1 текст "Начало", то удалить строку.
            ' В ворде, в конце каждой ячейки есть два символа. Один символ в виде кружка,
            ' второй символ вообще не видно, но VBA его видит.
        If tbl.Cell(i, 1).Range.Text = "Начало" & Chr(13) & Chr(7) Then
            tbl.Rows(i).Delete
        End If
    Next i
   
    '4. Вкл. монитора.
    Application.ScreenUpdating = True
   
    '5. Сообщение.
    MsgBox "Готово.", vbInformation

End Sub
[свернуть]

lapin9126