VulcanicEskimo |
|
1 |
|
Word Удалить абзац по условию22.12.2013, 00:47. Показов 17788. Ответов 5
Здравствуйте, уважаемые форумчане! Помогите с созданием макроса. Есть файл MS Word, в котором содержится несколько тысяч пунктов (по сути отдельных абзацев). Нужен макрос, который будет удалять абзацы, содержащие определённое слово или словосочетание. |
Sasha_Smirnov 5561 / 1367 / 150 Регистрация: 08.02.2009 Сообщений: 4,107 Записей в блоге: 30 |
||||
22.12.2013, 05:06 |
2 |
|||
Создал заново (хоть форумы и кишат…):
Миниатюры
1 |
shanemac51 Модератор 11342 / 4661 / 748 Регистрация: 07.08.2010 Сообщений: 13,508 Записей в блоге: 4 |
||||
22.12.2013, 14:11 |
3 |
|||
0 |
shanemac51 Модератор 11342 / 4661 / 748 Регистрация: 07.08.2010 Сообщений: 13,508 Записей в блоге: 4 |
||||
22.12.2013, 14:26 |
5 |
|||
Сообщение было отмечено как решение Решение расширение для удаления выделенного текста
2 |
Sasha_Smirnov 5561 / 1367 / 150 Регистрация: 08.02.2009 Сообщений: 4,107 Записей в блоге: 30 |
||||
22.12.2013, 14:55 |
6 |
|||
Предупредительность — это, конечно, изящно, но рискованно; например:
Нужно же предупредить: регистр, мол, не важен! А то будем искать *Вasic* — а найдётся и *basic*! (На тех же основаниях, на которых вы сочли незаконным мой наворот с переводом строк.)
0 |
Владимир спрашивает:
Подскажите, что делать в такой ситуации. К примеру, копируем из какого-то другого приложения текст в Word. Зачастую потом приходится с помощью клавиши Delete (иногда в сочетании с пробелом) подтягивать текст, чтобы он нахоился как надо, а не обрывками на каждой строчке. Эту рутичнную работу в принципе можно автоматизировать с помощью Замены. Указать искать знак Конец абзаца и заменить на пустоту (подтянуть и пр.), но тогда в этом случае подтянутся не только строки. но и абзацы. Но абзацы должны оставаться абзацами.
Вот код макроса, который объединяет разорванные строки абзацев, не касаясь нормальных абзацев. Ничего выделять не нужно. Макрос сам определит разрывы в абзацах или отдельные абзацы (с точкой в конце), и от этого будет исполняться нужная часть кода.
Sub delPar() Dim sPar As String Dim par As Paragraph Dim i As Integer i = 0 For Each par In ActiveDocument.Paragraphs If Right(par, 2) = Chr(46) & Chr(13) Then i = i + 1 Else If Right(par, 1) = Chr(13) Then par.Range.Text = Replace(par.Range.Text, Chr(13), " ") End If End If Next par End Sub
Could somebody please help me with a MS Word Macro that would search for a specific symbol in every paragraph throughout the document and delete paragraphs that DO NOT contain that symbol.
I know practically nothing about VBA, but just received a huge & unwieldy document I need to edit real fast.
shruti1810
3,8202 gold badges15 silver badges28 bronze badges
asked May 6, 2009 at 14:41
Here’s a quick macro that should do what you want — use with caution, and don’t forget to backup!
Set the value of ‘search’ to be the text that you’re looking for. It’s very crude, and will delete the paragraph if your text does not appear somewhere within it.
Sub DeleteParagraphContainingString()
Dim search As String
search = "delete me"
Dim para As Paragraph
For Each para In ActiveDocument.Paragraphs
Dim txt As String
txt = para.Range.Text
If Not InStr(LCase(txt), search) Then
para.Range.Delete
End If
Next
End Sub
I’ve tried this on Office 2007. Bit scary, but seems to work!
answered May 6, 2009 at 16:17
Paul ElleryPaul Ellery
1,6155 gold badges17 silver badges31 bronze badges
0
Paul’s answer is a good start, but I think out of date. I had the same question as the OP, but had to modify Paul’s answer to work in Word 2016. Keep in mind, If InStr returns 0 then it means that it couldn’t find a match, if it returns >0 then it means it did find a match. So if you want to flip the code to delete only found matches, change the ‘=’ to a ‘>’.
I hope this helps future readers.
PS: This code is amazing for helping clean up auto-transcripts from Zoom calls!
Dim search As String
search = "delete me"
Dim para As Paragraph
For Each para In ActiveDocument.Paragraphs
Dim txt As String
txt = para.Range.Text
If InStr(LCase(txt), LCase(search)) = 0 Then
para.Range.Delete
End If
Next
answered Apr 6, 2022 at 18:42
StevenSteven
1501 gold badge2 silver badges14 bronze badges
Sub GetOutParagraphsWithUserDefindContent_131222_1411() dim UDC as string udc=selection.range.text 'текст, наличие которого грохает абзац Dim i As Long 'счётчик абзацев With ActiveDocument 'работаем в активном документе Word i = .Paragraphs.Count '''''''''''''''''''''''''''''''''''''''''это незаконно'''''''' '.Range.Find.Execute Chr(11), replacewith:=Chr(13), Replace:=wdReplaceAll 'заменили разрывы строк (код 11) символами абзацев (код 13) ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 'Переберём все абзацы и удалим те, в которых есть данный текст Do While i > 0 If LCase(.Paragraphs(i).Range.Text) Like "*" & LCase(UDC) & "*" Then Debug.Print i, .Paragraphs(i).Range.Text .Paragraphs(i).Range.Delete 'удалили весь абзац, где был текст константы UDC 'ненужный абзац удалён End If i = i - 1 Loop End With End Sub
Удаляем пустые абзацы из документа Word
Ужос, что за уродство Word? Понадобилось в большом объёме текста удалить лишние пустые абзацы, вставленные при копировании с Web-страницы после каждой строки. Но на попытку указать ^P
(символ «Абзац») в поле «Найти» стандартного окна поиска и замены, Word XP/2003 выдал «^P нельзя использовать как специальный символ в поле Найти». Пришлось быстренько подключить макрос.
Чтобы его «повесить» у себя, зайдите в меню Word Сервис, Макрос, Редактор Visual Basic, вставьте в модуль NewMacros текст процедуры, закройте Visual Basic, в верхнем меню Word зайдите Сервис, Настройка, в категории Макросы найдите макрос delVoidParagraphs
и перетащите его иконку из этого окна на нужную панель инструментов Word. Потом правая кнопка на добавленном значке, выбрать Основной стиль, затем так же правой кнопкой можно выбрать или нарисовать значок. Процедура описана для офиса XP/2003, в 2007/10 как-то так же, но неудобней, как и всё в нём.
У меня работает отлично, вот текст макроса:
Sub delVoidParagraphs() 'Удаление пустых абзацев в выделенном фрагменте With Selection.Find .ClearFormatting .Replacement.ClearFormatting .Text = "^0013{2;}" .Replacement.Text = "^p" .MatchWildcards = True .Format = False .Forward = True If Selection.Type = wdSelectionIP Then .Wrap = wdFindContinue Else .Wrap = wdFindStop End If .Execute Replace:=wdReplaceAll End With Selection.Collapse direction:=wdCollapseStart End Sub
Избавиться от лишних символов разрыва строки, которые тоже часто появляются при копировании текста из интернета в Word, ещё проще: окно «Найти и заменить», в поле «Найти» указываем специальный символ ^l
(крышечка и буква l — «эль» латинская малая), поле «Заменить на» оставляем пустым и нажимаем кнопку «Заменить всё».
31.01.2011, 16:09 [21220 просмотров]