Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.53/285: Рейтинг темы: голосов - 285, средняя оценка - 4.53
1 / 1 / 0
Регистрация: 27.06.2012
Сообщений: 10

Выделение фрагмента текста в Word, заключенного между заданными словами

28.06.2012, 08:46. Показов 56299. Ответов 30
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день!
Помогите, пожалуйста с кодом макроса!
Дан файл с текстом:
.............
...Олег....
.............
...Иван....
.............
Необходимо выделить и скопировать все, что находится после слова "Олег" до слова "Иван".

Добавлено через 1 час 27 минут
Как поставить курсор после слова "Олег" я понял, но не понимаю, как выделить текст (или сосчитать количество символов) до слова Иван ((
1
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
28.06.2012, 08:46
Ответы с готовыми решениями:

Изменение текста в Word, заключенного между кавычками
Не могу разобраться в коде. Надо чтобы он во всем тексте word нашел все между кавычками « и » и изменил шрифт на ЖИРНЫЙ и КУРСИВ ...

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

Копирование текста между заданными границами в word
Здравствуйте, уважаемые. Возникла необходимость из огромного архива (файлов doc) договоров выбрать и скопировать в таблицу нужную...

30
 Аватар для KoGG
5636 / 1618 / 418
Регистрация: 23.12.2010
Сообщений: 2,426
Записей в блоге: 1
28.06.2012, 11:43
Лучший ответ Сообщение было отмечено как решение

Решение

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
26
27
28
29
30
31
32
Sub Выделить_между()
    Dim MyRange As Range, rStart&, rEnd&
    Set MyRange = ActiveDocument.Content
    With MyRange
        With .Find
            .ClearFormatting
            .Text = "Олег"
            .Forward = True
            .Wrap = wdFindStop
            .Format = False
            .MatchCase = False
            .MatchWholeWord = True
            .MatchWildcards = False
            .MatchSoundsLike = False
            .MatchAllWordForms = False
            .Execute
            If .Found Then rStart = MyRange.End: rEnd = rStart
        End With
    End With
    Set MyRange = ActiveDocument.Content
    With MyRange
        With .Find
            .Text = "Иван"
            .Execute
            If .Found Then rEnd = MyRange.Start
        End With
    End With
    If rEnd > rStart Then
        ActiveDocument.Range(rStart, rEnd).Select
        Selection.Copy
    End If
End Sub
3
1 / 1 / 0
Регистрация: 27.06.2012
Сообщений: 10
28.06.2012, 13:58  [ТС]
спасибо большое
0
15155 / 6428 / 1731
Регистрация: 24.09.2011
Сообщений: 9,999
28.06.2012, 20:28
Лучший ответ Сообщение было отмечено как решение

Решение

Можно одним поиском обойтись:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
Sub Макрос1()
Dim r
Set r = ActiveDocument.Range
With r.Find
    .ClearFormatting
    .Text = "Олег*Иван"
    .Forward = True
    .Wrap = wdFindContinue
    .Format = False
    .MatchCase = False
    .MatchWholeWord = False
    .MatchAllWordForms = False
    .MatchSoundsLike = False
    .MatchWildcards = True
    If .Execute Then
        ActiveDocument.Range(r.Start + 4, r.End - 4).Select
        Selection.Copy
    Else
        MsgBox "Текст не найден!", vbExclamation
    End If
End With
End Sub
4
0 / 0 / 0
Регистрация: 23.10.2013
Сообщений: 4
29.10.2013, 09:53
А как быть если в тексте несколько фрагментов, которые нужно выделить по очереди?
0
 Аватар для Sasha_Smirnov
5562 / 1370 / 150
Регистрация: 08.02.2009
Сообщений: 4,109
Записей в блоге: 30
29.10.2013, 10:49
Если автоматизировать, то вот от этого можно плясать:
Цитата Сообщение от Казанский Посмотреть сообщение
Visual Basic
1
.Text = "Олег*Иван"
Конечно, с подгонкой длины ограничивающих слов:
Цитата Сообщение от Казанский Посмотреть сообщение
ActiveDocument.Range(r.Start + 4, r.End - 4).Select
Лучше опишите весь проект: возможно, чем менять код, легче поставить закладки — и по ним уже выделять.
0
0 / 0 / 0
Регистрация: 23.10.2013
Сообщений: 4
30.10.2013, 03:13
Имеется документ, состоящий из некоторого количества блоков текста. Каждый блок имеет вид [начало] текст [конец]. Текст выгружается из БД, причем без форматирования и каждая строка заканчивается символом абзаца (^p), и приходитсякаждый раз исправлять текст. Я написал макрос, который приводит текстовку в нормальный вид, разбивает на абзацы выбранный фрагмент документа, поэтому приходится постоянно самостоятельно выделять блок текста и выполнять макрос. За реальный абзац я беру только сочетание вида ".^p", остальные заменяю на пробелы. Код, который подсказал KoGG'a выделяет только первый блок, а хотелось бы чтобы происходило поочередное выделение и форматирование каждого блока текста во всем документе.
Спасибо за помощь)
0
 Аватар для Sasha_Smirnov
5562 / 1370 / 150
Регистрация: 08.02.2009
Сообщений: 4,109
Записей в блоге: 30
30.10.2013, 03:24
И я писал подобный исправитель, но теперь не надо — Word это исправляет: Как убрать переносы строк и знаки переноса
0
0 / 0 / 0
Регистрация: 23.10.2013
Сообщений: 4
30.10.2013, 05:20
Спасибо за подсказку, но сейчас посидел, покрутил автоформат, он делает не совсем то, что нужно - форматирует весь документ, мне же нужно исправить только текстовку блока, не затрагивая иной информации., т.е. от выделения фрагментов врятли получится уйти, даже при использовании автоформата. Если есть код Вашего исправителя, было бы рад увидеть его
0
 Аватар для Sasha_Smirnov
5562 / 1370 / 150
Регистрация: 08.02.2009
Сообщений: 4,109
Записей в блоге: 30
30.10.2013, 10:17
И мне было бы радостно, но с собой не ношу — он в офисе...

Да и воздействует он на весь документ. А вот Автоформат, возможно, на выделение:
VB.NET
1
Selection.Range.Autoformat
(возможно, чушь написал: попробовать не могу: я не в офисе)
0
0 / 0 / 0
Регистрация: 23.10.2013
Сообщений: 4
30.10.2013, 10:23
Автоформат выполняется в выделенной области, но опять же, нужно выделить несколько областей, чтобы весь документ был в нормальном виде)
0
 Аватар для Sasha_Smirnov
5562 / 1370 / 150
Регистрация: 08.02.2009
Сообщений: 4,109
Записей в блоге: 30
30.10.2013, 22:00
Во многом схожая тема (методически): Как в ворде 2003 сделать разбивку и нумерацию по отдельным предложениям

Добавлено через 10 часов 24 минуты
И ещё фишки, полезные для редактирования абзацев: Как удалить символы абзацев поиском-заменой
0
361 / 38 / 2
Регистрация: 16.03.2013
Сообщений: 196
31.10.2013, 13:47
Как быть, если нужно выделить все вхождения между Иван*Олег?

Иван...........Олег
.........................
.........................
Иван...Олег
...........................
Иван...Олег
0
6082 / 1327 / 195
Регистрация: 12.12.2012
Сообщений: 1,023
31.10.2013, 17:51
Цитата Сообщение от Slamzor Посмотреть сообщение
Как быть, если нужно выделить все вхождения между Иван*Олег?
Использовать замечательный код Казанского из поста №4 данной темы, конечно же:

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
26
27
28
29
30
31
32
33
34
35
Sub Ìàêðîñ1()
    Dim r, f As Boolean, firstOccurence As Long
    Set r = ActiveDocument.Range
    Do
        With r.Find
            .ClearFormatting
            .Text = "Èâàí*Îëåã"
            .Forward = True
            .Wrap = wdFindContinue
            .Format = False
            .MatchCase = False
            .MatchWholeWord = False
            .MatchAllWordForms = False
            .MatchSoundsLike = False
            .MatchWildcards = True
            If .Execute Then
                If f Then
                    If r.Start = firstOccurence Then
                        MsgBox "Áîëüøå íè÷åãî íå íàéäåíî.", vbInformation
                        Exit Do
                    End If
                Else
                    firstOccurence = r.Start
                    f = True
                End If
                ActiveDocument.Range(r.Start + 4, r.End - 4).Select
                MsgBox "Íàéäåí ïîäõîäÿùèé òåêñò...", vbInformation
                Set r = ActiveDocument.Range(r.End, r.End)
            Else
                MsgBox "Òåêñò íå íàéäåí!", vbExclamation
                Exit Do
            End If
        End With
    Loop
End Sub
Как говорится, найдите 10 отличий .
  1. добавил цикл;
  2. ввел строку для обновления диапазона поиска;
  3. ввел проверку для предотвращения поиска уже найденных текстов;
  4. и... все.

С уважением,
Aksima
1
361 / 38 / 2
Регистрация: 16.03.2013
Сообщений: 196
31.10.2013, 18:58
Aksima Спасибо. Только это скорее поиск, чем выделение, нельзя этот текст обработать. Подскажите, в какую часть кода можно обрабатывающую часть добавить, например стиль присвоить.
Я начинающий, в такой штуке мне сложно разобраться.
0
6082 / 1327 / 195
Регистрация: 12.12.2012
Сообщений: 1,023
31.10.2013, 23:11
Цитата Сообщение от Slamzor Посмотреть сообщение
нельзя этот текст обработать
Неправда - можно. Замените строчку, отвечающую за выделение текста...

Visual Basic
1
ActiveDocument.Range(r.Start + 4, r.End - 4).Select
...на код обработки текста.


Например, после замены ее на:
Visual Basic
1
ActiveDocument.Range(r.Start + 4, r.End - 4).Style = ActiveDocument.Styles("Ñèëüíîå âûäåëåíèå")

найденный текст будет выделяться стилем "Сильное выделение".

С уважением,
Aksima
2
4 / 4 / 0
Регистрация: 18.02.2013
Сообщений: 539
31.10.2013, 23:15
привет. вроде ворд, а не понял о чем речь идет. можно скрин результата посмотреть. чтобы мне было понятно
0
361 / 38 / 2
Регистрация: 16.03.2013
Сообщений: 196
31.10.2013, 23:50
Лучший ответ Сообщение было отмечено как решение

Решение

Aksima спорить не буду). Я имел в виду, что средствами Word ... Спасибо еще раз.

койтемиров
Миниатюры
Выделение фрагмента текста в Word, заключенного между заданными словами   Выделение фрагмента текста в Word, заключенного между заданными словами  
0
4 / 4 / 0
Регистрация: 18.02.2013
Сообщений: 539
01.11.2013, 00:22
Slamzor, а для чего такая писанина в ворде нужна бывает? к примеру
0
361 / 38 / 2
Регистрация: 16.03.2013
Сообщений: 196
01.11.2013, 08:10
Цитата Сообщение от койтемиров Посмотреть сообщение
, а для чего такая писанина в ворде нужна бывает? к примеру
В дипломе, в диссертации, в тех документации. Да мало ли где.
Например, можно поправить текст между всеми словами как Рисунок - Таблица. Весь текст привести к единому формату. Макрос универсален, каждый сам себе применение найдет. Единственное, не привязаться к тексту, если он в таблице, у меня в некоторых случаях, вторая часть поиска в таблице находится.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
01.11.2013, 08:10
Помогаю со студенческими работами здесь

Выделение текста в Word между символами
Как выделить текст в Word'е между определенными символами, например "%", для последующей его замены? Документ до замены: Текст_1 ...

Выделение фрагмента текста в textarea
Как это возможно сделать? Вот как я делал выделение текста в теге, но такой не канает на текстовые поля: <div...

Выделение (подсвечивание) фрагмента текста в ячейке DataGridView
Здравствуйте. Я реализовал поиск по ячейкам DataGridView, хочу сделать выделение (подсвечивание) фрагмента текста в ячейках с найденной...

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

Как макросом в word-e выделить два несмежных фрагмента текста?
Мне кажется, что должна существовать функция позволяющая добавлять новое выделение к уже существующему, чтото типа этого: ...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга, Ты же видел моря и метели. Как сменялись короны и стяги, Как эпохи стрелою летели. - Этот мир — это крылья и горы, Снег и пламя, любовь и тревоги, И бескрайние. . .
PowerShell Snippets
iNNOKENTIY21 11.11.2025
Модуль PowerShell 5. 1+ : Snippets. psm1 У меня модуль расположен в пользовательской папке модулей, по умолчанию: \Documents\WindowsPowerShell\Modules\Snippets\ А в самом низу файла-профиля. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru