С Новым годом! Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.74/104: Рейтинг темы: голосов - 104, средняя оценка - 4.74
VulcanicEskimo
1
Word

Удалить абзац по условию

22.12.2013, 00:47. Показов 19921. Ответов 5
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте, уважаемые форумчане!

Помогите с созданием макроса. Есть файл MS Word, в котором содержится несколько тысяч пунктов (по сути отдельных абзацев). Нужен макрос, который будет удалять абзацы, содержащие определённое слово или словосочетание.
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
22.12.2013, 00:47
Ответы с готовыми решениями:

Удалить пустой абзац после таблицы
Есть вот такой вот файлик (для примера). Как в нем автозаменой удалить лишние абзацы ? Если б без...

Word: Как удалить лишние абзацы, что б между каждым текстом был только один абзац
Как удалить лишние абзацы, что б между каждым текстом был только один абзац?

Удалить абзац
Слишком сложно для меня(( Дано целое число K и текстовый файл. Удалить из файла абзац с номером K...

Удалить из файла абзац с номером N
2)Дано число N и текстовый файл. Удалить из файла абзац с номером N (абзацы отделяются друг от...

5
5562 / 1368 / 150
Регистрация: 08.02.2009
Сообщений: 4,109
Записей в блоге: 30
22.12.2013, 05:06 2
Создал заново (хоть форумы и кишат…):
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
Option Explicit     'указание интерпретатору BASIC проверять, что данные объявлены
 
Sub GetOutParagraphsWithUserDefindContent()
Const UDC = "этот абзац я не хочу" 'текст, наличие которого грохает абзац
    Dim i As Long           'счётчик абзацев
    Dim oPars As Object     'переменная для работы с абзацами документа
    Dim oPar As Object      'переменная для работы с каждым абзацем документа
    
    With ActiveDocument 'работаем в активном документе Word
        Set oPars = .Paragraphs
        'переменная oPar стала семейством ActiveDocument.Paragraphs
        .Range.Find.Execute Chr(11), replacewith:=Chr(13), Replace:=wdReplaceAll
        'заменили разрывы строк (код 11) символами абзацев (код 13)
    End With
 
    'Переберём все абзацы и удалим те, в которых есть данный текст
    For Each oPar In oPars
        i = i + 1
    
        If oPars(i).Range.Text Like "*" & UDC & "*" Then
            oPars(i).Range.Delete 'удалили весь абзац, где был текст константы UDC
            i = i - 1       'ненужный абзац удалён - счёт возвращаем назад на единицу
        End If
    Next
End Sub
Миниатюры
Удалить абзац по условию   Удалить абзац по условию  
1
Модератор
Эксперт MS Access
12106 / 4966 / 791
Регистрация: 07.08.2010
Сообщений: 14,593
Записей в блоге: 4
22.12.2013, 14:11 3
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
Sub GetOutParagraphsWithUserDefindContent_131222_1411()
Const UDC = "dao" 'текст, наличие которого грохает абзац
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
0
5562 / 1368 / 150
Регистрация: 08.02.2009
Сообщений: 4,109
Записей в блоге: 30
22.12.2013, 14:19 4
Цитата Сообщение от shanemac51 Посмотреть сообщение
Visual Basic
1
'это незаконно'
Спасибо, но я взял живой пример и на него ориентировался. А кто судия-то?

В тему: Скрипт для избирательного удаления строк в Word
0
Модератор
Эксперт MS Access
12106 / 4966 / 791
Регистрация: 07.08.2010
Сообщений: 14,593
Записей в блоге: 4
22.12.2013, 14:26 5
Лучший ответ Сообщение было отмечено как решение

Решение

расширение для удаления выделенного текста
--выделить ненужный кусок теста
--вызвать макрос
--может еще что-то не надо
--вызвать тот же макрос


Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
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
2
5562 / 1368 / 150
Регистрация: 08.02.2009
Сообщений: 4,109
Записей в блоге: 30
22.12.2013, 14:55 6
Предупредительность — это, конечно, изящно, но рискованно; например:
Цитата Сообщение от shanemac51 Посмотреть сообщение
Visual Basic
1
LCase
Нужно же предупредить: регистр, мол, не важен! А то будем искать *Вasic* — а найдётся и *basic*!

(На тех же основаниях, на которых вы сочли незаконным мой наворот с переводом строк.)
0
22.12.2013, 14:55
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
22.12.2013, 14:55
Помогаю со студенческими работами здесь

Удалить из файла абзац с номером
Дано целое число K и текстовый файл. Удалить из файла абзац с номером K (абзацы выделяются с...

Удалить из файла абзац с заданным номером
Дано целое число K и текстовый файл. Удалить из файла абзац с номером K (абзацы отделяются друг...

Как удалить абзац в конце файла ?
Всем привет подскажите как удалить абзац в конце файла который появляется сам по себе Использую...

Как двойной абзац заменить на абзац с нижней границей?
Есть текст, в котором периодически друг за другом идут два абзаца. Мне нужно один убрать, а после...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Что такое HCL Notes и как с ним работать
InfoMaster 10.01.2025
HCL Notes (ранее известный как IBM Notes и Lotus Notes) представляет собой комплексную платформу для совместной работы и обмена информацией в корпоративной среде. Это многофункциональное решение,. . .
Как работать с Git из Windows и Visual Studio
InfoMaster 10.01.2025
Работа с Git в Windows Работа с Git в операционной системе Windows может быть осуществлена с помощью различных инструментов, каждый из которых обладает своими уникальными возможностями и. . .
Аналог оператора switch case в Python
InfoMaster 10.01.2025
Оператор switch case используется в программировании для выбора одного из нескольких вариантов исполнения кода. Однако в языке Python этот оператор отсутствует. Понимание аналогов switch case в. . .
Отличия абстрактного класса от интерфейса
InfoMaster 10.01.2025
В современной разработке программного обеспечения существуют два основных механизма реализации абстракции: абстрактные классы и интерфейсы. Эти инструменты, хотя и схожи в своей основной цели -. . .
Как работать в Git
InfoMaster 10.01.2025
Git — это одна из наиболее популярных систем контроля версий, которая активно используется разработчиками по всему миру. Она позволяет эффективно управлять изменениями в коде, координировать работу. . .
Реализация передвижения персонажа в Unity3d на C#
InfoMaster 10.01.2025
Реализация передвижения персонажа в Unity3D начинается с правильной настройки проекта. Этот этап критически важен для создания отзывчивого и плавного управления. Рассмотрим основные шаги для создания. . .
Docker: руководство для начинающих
InfoMaster 10.01.2025
В современном мире разработки программного обеспечения контейнеризация стала неотъемлемой частью процесса создания и развертывания приложений. Docker, как ведущая платформа контейнеризации, произвела. . .
Книги и учебные ресурсы по C#
InfoMaster 08.01.2025
Базовые учебники и руководства Одной из лучших книг для начинающих является "C# 10 и . NET 6 для начинающих" Эндрю Троелсена и Филиппа Джепикса . Книга последовательно раскрывает основные концепции. . .
Что такое NullReferenceEx­­­ception и как исправить?
InfoMaster 08.01.2025
NullReferenceException - одно из самых распространенных исключений, с которым сталкиваются разработчики на C#. Это исключение возникает при попытке обратиться к членам объекта (методам, свойствам или. . .
Что такое Null Pointer Exception (NPE) и как это исправить?
InfoMaster 08.01.2025
Null Pointer Exception (NPE) - это одно из самых распространенных исключений в Java, которое возникает при попытке использовать ссылку на объект, значение которой равно null. Это исключение относится. . .
Русский язык в консоли C++
InfoMaster 08.01.2025
При разработке программ на C++ одной из частых проблем, с которой сталкиваются русскоязычные программисты, является корректное отображение кириллицы в консольных приложениях. Эта проблема особенно. . .
Telegram бот на C#
InfoMaster 08.01.2025
Разработка ботов для Telegram стала неотъемлемой частью современной экосистемы мессенджеров. C# предоставляет мощный и удобный инструментарий для создания разнообразных ботов, от простых. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru