В недрах интернета нашел макрос, который удаляет строки таблицы, содержащие определенные данные, в конкретном случае текст "Удалить".
Как его "допилить" чтобы удаление начиналась с определенной строки и до конца таблицы (допустим пропустить 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 просто быстрее, чем цикл по большому кол-ву элементов. Если строк мало, то цикл по строкам подойдёт.
В документе есть таблица (она одна), первые две строки - "шапка" таблицы, далее в таблице повторяется вторая строка из "шапки" их надо удалить.
Макрос
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
Спасибо, как всегда профессионально.