Статьи из блога

Поиск слова и удаление строк над ним

Вопрос от Алексея:

Мне нужен макрос, который выполнял бы поиск ключевого слова (например "Подпись") и отсчитывал вверх от этого слова 8 строк, и вот эти отсчитанные 8 строк удалял.

Попробуйте следующий макрос:

Sub Del_8_lines()
Dim rDcm As Range
Dim x As Long
Set rDcm = ActiveDocument.Range
With rDcm.Find
   .Text = "подпись"
   If .Execute Then
      rDcm.Select
      ' Selection.Bookmarks("\line").Select
      ' Selection.Collapse
      Selection.MoveUp
      For x = 1 To 7
         Selection.Bookmarks("\line").Select
         Selection.Delete
         Selection.MoveUp
      Next
   End If
End With
End Sub

Если вы не знаете, как подключить к документу и применить этот макрос, изучите следующие заметки с сайта:

Создание макроса из готового кода

Автоматическая запись макроса

twitter.com facebook.com vkontakte.ru odnoklassniki.ru mail.ru ya.ru rutvit.ru myspace.com technorati.com digg.com friendfeed.com pikabu.ru blogger.com liveinternet.ru livejournal.ru memori.ru google.com bobrdobr.ru mister-wong.ru yahoo.com yandex.ru del.icio.us

Еще записи по вопросам использования Microsoft Word:

Комментариев: 31

  1. Андрей
    10.01.2009 в 12:20 | #1

    Помогите с написанием макроса - у меня есть файл 1.doc, содержащий много слов, и файл 2.doc, с некоторым набором слов из 1.doc. как побыстрому удалить из 1.doc слова, используемые во втором файле?

  2. Фёдоров Антон
    17.02.2009 в 14:56 | #2

    Что нужно изменить в выше приведённом макросе, что бы искалось слово "подпись" по всему документу, и после нахождения выберались все строки содержащие это слово для дальнейщего их редактирования.

  3. mikl1603
    20.03.2009 в 09:23 | #3

    Как написать макрос чтобы он удалял всё от одного ключевого слова до другого?

  4. 20.03.2009 в 12:45 | #4

    Как написать макрос чтобы он удалял всё от одного ключевого слова до другого?

    Очень просто. Ищем первое слово. Запоминаем место в документе, где это слово заканчивается. Это будет точкой старта нужного диапазона.

    Ищем второе слово. Его начало будет концом нужного диапазона. Запоминаем. Определяем новый диапазон и удаляем его.

    Такой макрос.

    Sub DeleteBetweenTwoWords()
      Dim Slovo1$, Slovo2$
      Dim iStart As Long, iEnd As Long
      Slovo1 = "Маша": Slovo2 = "каша"
      With ActiveDocument.Range.Find
        .ClearFormatting: .Replacement.ClearFormatting
        .Text = Slovo1
        If .Execute Then .Parent.Select: iStart = .Parent.End Else Exit Sub
      End With
      With ActiveDocument.Range.Find
        .ClearFormatting: .Replacement.ClearFormatting
        .Text = Slovo2
        If .Execute Then .Parent.Select: iEnd = .Parent.Start Else Exit Sub
      End With
      If iStart = 0 And iEnd = 0 Then ActiveDocument.Range(iStart, iEnd).Delete
    End Sub

  5. mikl1603
    21.03.2009 в 14:45 | #5

    Огромное СПАСИБО, Алесандр

  6. kol
    21.03.2009 в 15:14 | #6

    Александр, макрос не работает

    пишет ошибку в

    If iStart 0 And iEnd 0 Then ActiveDocument.Range(iStart, iEnd).Delete

  7. 21.03.2009 в 15:28 | #7

    Блог почему-то удаляет знаки равно («=») при копировании текста. Поставь равно перед нулямм и все заработает. Нуж и еще посмотри, может где пропало.

  8. 21.03.2009 в 15:31 | #8

    Александр, при публикации кодов используйте обрамление их в эти теги: <pre lang="vb"></pre>. Тогда должно быть все нормально.

  9. mikl1603
    21.03.2009 в 16:01 | #9

    Александр, выделяет только "каша"

  10. 21.03.2009 в 16:10 | #10

    Александр, выделяет только "каша"

    Но удаляет? Удаляет. Проверял. Чтобы не выделяло нужно убрать .Parent.Select. Я это делал для отладки, чтобы видеть диапазон.

  11. mikl1603
    21.03.2009 в 16:17 | #11

    не удаляет, а если убрать .Parent.Select. то выделяет "маша" и всё

    подскажите ПОДАЛУЙСТА, очень надо

  12. 21.03.2009 в 16:27 | #12

    Я понял. В строке

    If iStart = 0 And iEnd = 0 Then ActiveDocument.Range(iStart, iEnd).Delete

    Нужно заменить And на Or. По всей видимости

  13. mikl1603
    21.03.2009 в 16:30 | #13

    Всё равно не работает

  14. 21.03.2009 в 16:32 | #14

    Виноват, должно быть не

    If iStart = 0 And iEnd = 0 Then ActiveDocument.Range(iStart, iEnd).Delete

    а

    If iStart = 0 And iEnd = 0 Then ActiveDocument.Range(iStart, iEnd).Delete

  15. mikl1603
    21.03.2009 в 16:36 | #15

    Тогда показывает ошибку

  16. 21.03.2009 в 17:21 | #16

    А почему бы просто не воспользоваться диалогом "Найти и Заменить" («Ctrl+H»)? В поле Найти введите такое выражение с двумя вашими ключевиками:

    (каша)*(Маша)

    Поле Заменить оставьте пустым.

    Установите флажки на параметре Подстановочные знаки.

    Нажмите Заменить все.

  17. 21.03.2009 в 17:22 | #17

    А если нужно оставить ключевые слова, то в поле Заменить введите такое выражение:

    \1 \2

    Отпишитесь о результатах.

  18. mikl1603
    21.03.2009 в 17:30 | #18

    СПАСИБО АНТОН

    Оба варианта работают ОТЛИЧНО

  19. Андрей
    26.03.2009 в 19:37 | #19

    ... у меня есть файл 1.doc, содержащий много слов, и файл 2.doc, с некоторым набором слов из 1.doc. как побыстрому удалить из 1.doc слова, используемые во втором файле?

    Так как же всетаки переходить из файла в файл при выполнении макроса? Все понятно если нужно удалить слова в одном файле, но как быть, если слова одного файла используют как шаблон для другого?? помогите, плз...

  20. Павел
    08.06.2009 в 01:14 | #20

    Подскажите, пожалуйста как реализовать удаление пустых строк в таблице word.

  21. 08.06.2009 в 10:05 | #21

    Выделите таблицу и запустите поиск и замену.

    Найти: ^0013{2;}

    Заменить: ^0013

    Подстановочные знаки включены.

  22. 08.06.2009 в 20:26 | #22

    Либо можно воспользоваться вот таким макросом:

    Sub delEmptyRows()
    'Удаление пустых строк в 1-й таблице
    Dim oTable As Table
    Dim oRow As row
    Set oTable = ActiveDocument.Tables(1)
    For Each oRow In oTable.Rows
        If Len(oRow.Cells(1).Range.Text) = 2 Then oRow.Delete
    Next oRow
    End Sub

  23. Павел
    10.06.2009 в 00:28 | #23

    К сожалению макрос не работает при наличии объединенных по вертикали ячеек...

  24. 10.06.2009 в 08:31 | #24

    Павел, дело в том, что при объединении строк по вертикали исчезает само понятие строки. Поэтому работать с отдельными строками невозможно.

    Можно работать только с ячейками (коллекция Cells в каждой таблице). Хотя свойство RowIndex у ячейки остается.

    Например, если условиться, что пустая ячейка в таблице означает пустую строку, то можно пробовать такой макрос:

    Sub DeleteEmptyRow()
      Dim oCell As Cell, oTbl As Table
      For Each oTbl In ActiveDocument.Tables
        For Each oCell In oTbl.Range.Cells
          If Len(oCell.Range.Text) = 2 Then oCell.Delete wdDeleteCellsEntireRow
        Next oCell
      Next oTbl
    End Sub

  25. Андрей
    17.06.2009 в 20:35 | #25

    А как найти и выделить текст между комбинацией символов CHR(27)+"P" и CHR(27)+"M"?

    Это досовские управляющие комбинации.

    Через подстановочные символы не получается

  26. Андрей
    17.06.2009 в 20:52 | #26

    Извините, разобрался

    .Text = "(^027P)*(^027M)"

  27. Дмитрий
    04.09.2009 в 14:34 | #27

    Подскажите пожалуйста как сделать так, чтобы в отдельно взятой колонке удалялись цифровые значения вместе со строками, взятые из другой колонки на соседнем листе?

    спасибо за ответ

  28. Danil
    16.09.2009 в 20:27 | #28

    пытался применить комментарии-не смог.не подскажете как в вордовском документе удалить все строки начинающиеся со слова "без". вручную уходить нереально много времени.если можно без использования макросов.

  29. 16.09.2009 в 20:40 | #29

    Все строки или все абзацы? Если абзацы, тогда в поле найти записать без*^0013, включить подстановочные знаки, поле «Заменить» оставить пустым. «Заменить все»

    Ну а если все же строки, тогда нужно писать макрос.

  30. КатяН
    04.10.2009 в 15:35 | #30

    Здравствуйте. Подскажите, пожалуйста, можно ли сделать так (и как это реализовать), чтобы ворд искал самое встречаемое в тексте слово, а лучше сочетание слов и выводил информацию о том сколько раз встретилось?

  31. Fellini
    26.07.2011 в 11:29 | #31

    Как написать макрос чтобы он удалял всё от одного ключевого слова до другого?

    и небольшое изменение в макрос помогите добавить.

    удаление не от слова к слову, а от предложения содержащего слово до предложения содержащее второе ключевое слово.

Оставьте комментарий!

(обязательно)

^ Наверх