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

Поиск замена по регулярному выражению в word

10.03.2011, 15:50. Показов 12739. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день. Пишу макрос для автоматической замены и расстановки меток.
Требуется следующее:
1) найти жирные выделения в тексте ТВ-Программы и добавить с каждой стороны метки <b> </b>
2) пометить текст тв-программы на каждый день недели с каждой стороны метками <имя_канала_день_недели></имя_канала_день_недели>
3) Как поставить в редакторе фигурные угловые кавычки, а то он мне вот такие "" выставляют?

Вопрос в том как реализовать это на vba для ворда (нужна автоматизация процесса)
1) Небольшой опыт написания макросов у меня уже есть, но что-то не совсем я понял как с регулярными выражениями быть. В поиске замене (стандартный вордовский) для разметки жирных выделений я применял конструкцию: ищу = «*», заменяю на = <b>^&</b>. В коде я пытался реализовать следующим образом
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
Sub Tags()
Set myRange = ActiveDocument.Content
Set myRegFind = CreateObject("VBScript.RegExp")
Set myRegRep = CreateObject("VBScript.RegExp")
myRegFind.Pattern = "«*»"
myRegRep.Pattern = "<b>^&</b>"
Set myRange = ActiveDocument.Content
myRange.Find.Execute FindText:=myRegExp
If myRange.Find.Found = True & myRange.Bold = True Then
myRange = myRegExp.Replace(myRange, myRegRep)
End If
End Sub
но я так понимаю, во первых получится одна замена, а во вторых FindText неправильно задан (Type mismatch). Как правильно задать поиск замену всем жирным текстовым выделениям? МОжет как-то через массив?

2) тоже самое: тв-программа выглядит примерно так

Понедельник
03.00 «2:22»
05.00 «Шаманы пустыни»
06.50 «Успеть до полуночи»
09.00 «Ложь и Иллюзии»
11.00 «Смертельный удар»
13.00 «Кикбоксер»

ищу = Понедельник*^0013^0013 (так как программы делятся на две строчки). заменяю на = Понедельник^0013<tv1000_1>^&</tv1000_1>.
При это естесвенно появляется второе слово понедльник. Как можно задать запрос, чтобы не повторялось слово понедельник и вообще одно при замене удалялось Как в коде этьо выглядеть будет
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
10.03.2011, 15:50
Ответы с готовыми решениями:

Замена текста по регулярному выражению (Макрос для Word)
В регулярках новичок. В документе имеются следующие строки: ] ] ] Их необходимо найти и заменить гипперссылкой (источник для...

Замена текста по регулярному выражению
В файле имеется ряд строк, среди которых есть следующая строка: starts3d4s4end Необходимо найти эту строку, зная лишь то, что она...

Как выдернуть из строки подстроку по регулярному выражению?
У меня есть колонка такого вида: (3466) 6124132 gray3412@gray-nv.ru То есть в ней почти всегда есть email и может быть несколько...

4
2309 / 1541 / 115
Регистрация: 13.06.2009
Сообщений: 5,575
10.03.2011, 18:13
  1. VBScript.RegExp – используется для поиска и замены текста в переменных, а не в Word.
  2. VBA – это объектный язык программирования, т.е. программист работает не с цифрами, а с объектами. Пример объекта – это Таблица в Word. Объект Таблица имеет определённый набор свойств и методов, который запрограммирован программистами Word. Воздействовать на данный объект (Таблица) можно, только используя эти запрограммированные свойства и методы и ничего другого.
  3. Что касается нашего примера, то в Word можно осуществлять поиск только запрограммированными средствами, к которым относится метод Find.
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Sub P1()
'Окружение жирного текста <b> </b>.
    With ActiveDocument.Content.Find
        .Text = "(<*>)"
        .Font.Bold = True
        .MatchWildcards = True
        .Replacement.Text = "<b>\1</b>"
        .Execute Replace:=wdReplaceAll
    End With
'Пометка текста ТВ-программы.
    With ActiveDocument.Content.Find
        .Text = "(Понедельник)(^0013)(*)(^0013)(^0013)"
        .MatchWildcards = True
        .Replacement.Text = "\1\2<tv1000_1>\3</tv1000_1>"
        .Execute Replace:=wdReplaceAll
    End With
End Sub
0
 Аватар для mc-black
2786 / 718 / 106
Регистрация: 04.02.2011
Сообщений: 1,443
10.03.2011, 18:32
Цитата Сообщение от Busine2009 Посмотреть сообщение
запрограммированные свойства и методы и ничего другого
и события, что относится если не ко всем объектам, то ко многим, особенно из числа связанных с пользовательским интерфейсом.
0
 Аватар для Sasha_Smirnov
5562 / 1370 / 150
Регистрация: 08.02.2009
Сообщений: 4,109
Записей в блоге: 30
11.03.2011, 01:16
Покажите кусок исходного текта и что из него нужно получить.
0
13 / 1 / 0
Регистрация: 10.03.2011
Сообщений: 25
11.03.2011, 07:52  [ТС]
Busine2009, благодарю тебя за наводку. Исходный код получился такой Всем спасибо за участие
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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
Sub Tags()
'Окружение жирного текста <b> </b>.
    With ActiveDocument.Content.Find
        .Text = "\«(*)\»"
        .Font.Bold = True
        .MatchWildcards = True
        .Replacement.Text = "<b>\1</b>"
        .Execute Replace:=wdReplaceAll
    End With
'Пометка текста ТВ-программы.
'Понедельник
    With ActiveDocument.Content.Find
        .Text = "(Понедельник)(*)(^0013)(^0013)"
        .MatchWildcards = True
        .Replacement.Text = "\1\3<tv1000_1>\2^0013</tv1000_1>"
        .Execute Replace:=wdReplaceAll
    End With
'Вторник
    With ActiveDocument.Content.Find
        .Text = "(Вторник)(*)(^0013)(^0013)"
        .MatchWildcards = True
        .Replacement.Text = "\1\3<tv1000_2>\2^0013</tv1000_2>"
        .Execute Replace:=wdReplaceAll
    End With
'Среда
    With ActiveDocument.Content.Find
        .Text = "(Среда)(*)(^0013)(^0013)"
        .MatchWildcards = True
        .Replacement.Text = "\1\3<tv1000_3>\2^0013</tv1000_3>"
        .Execute Replace:=wdReplaceAll
    End With
'Четверг
    With ActiveDocument.Content.Find
        .Text = "(Четверг)(*)(^0013)(^0013)"
        .MatchWildcards = True
        .Replacement.Text = "\1\3<tv1000_4>\2^0013</tv1000_4>"
        .Execute Replace:=wdReplaceAll
    End With
'Пятница
    With ActiveDocument.Content.Find
        .Text = "(Пятница)(*)(^0013)(^0013)"
        .MatchWildcards = True
        .Replacement.Text = "\1\3<tv1000_5>\2^0013</tv1000_5>"
        .Execute Replace:=wdReplaceAll
    End With
'Суббота
    With ActiveDocument.Content.Find
        .Text = "(Суббота)(*)(^0013)(^0013)"
        .MatchWildcards = True
        .Replacement.Text = "\1\3<tv1000_6>\2^0013</tv1000_6>"
        .Execute Replace:=wdReplaceAll
    End With
'Воскресенье
    With ActiveDocument.Content.Find
        .Text = "(Воскресенье)(*)(^0013)(^0013)"
        .MatchWildcards = True
        .Replacement.Text = "\1\3<tv1000_7>\2^0013</tv1000_7>"
        .Execute Replace:=wdReplaceAll
    End With
End Sub
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
11.03.2011, 07:52
Помогаю со студенческими работами здесь

Поиск и замена текста в word
Как в тексте документа ворда заменить одно слово на другое? Dim DocWord = New Microsoft.Office.Interop.Word.Application() ...

Поиск и замена текста в Word
Коллеги, помогите как определить последовательность цифр в тексте. и если не трудно подскажите где почитать что значат комбинации в...

Поиск и замена в Word 2003
Буду очень признателен за любую помощь! Задача такова: есть большой документ (возможно с формулами, картинками, таблицами), необходимо...

MS Word: Поиск и замена с Wildcard и условием If.. Then
Привет всем, очень нужен модуль для VBA-макроса в MS Word, который бы производил следующие замены в таблице с текстом: 1) Найти в...

VBA-Word: поиск и замена предложений
Ситуация такая: есть большой текстовой файл, включающий в себя Н-количество статей по принципу Заголовок (Стиль Заголовок3) и текст (Стиль...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru