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

Поиск и чередование фраз

11.10.2018, 17:28. Показов 2233. Ответов 5
Метки vba, word (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день.
Помогите с таким макросом: в документе куча раз встречается фраза, например "Мне нравятся твои булки". Необходимо перебрать все эти фразы и заменить следующим образом: 1-ую и 2-ую найденную по порядку фразу заменяем, 3-ю и 4-ую по порядку не трогаем, 5 и 6 меняем, 7 и 8 не трогаем и т.д. чередуем через две найденный фразы. Как бы мне это провернуть?
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
11.10.2018, 17:28
Ответы с готовыми решениями:

Вставка одинаковых фраз в большом количестве
Вот сделал документик. Немного грустный, но это жизнь ))) Смысл - нужно включать большое...

Удаление содержимого ячеек, в которых нет ключевых фраз
Здравствуйте, помогите пожалуйста с проблемой Корректирую макрос в excel, необходимо чтобы...

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

5
15155 / 6428 / 1731
Регистрация: 24.09.2011
Сообщений: 9,999
11.10.2018, 20:56
Цитата Сообщение от юный_падаван Посмотреть сообщение
Как бы мне это провернуть?
Для начала приложить файл-пример: что есть - что надо.
0
1 / 1 / 1
Регистрация: 29.05.2015
Сообщений: 13
11.10.2018, 21:11  [ТС]
Хм. Ну есть вордорвскй файл с текстом:

"Привет, мне нравятся твои булки. Мне все говорят мне нравятся твои булки, а я им в ответ мне нравятся твои булки. Хотя это не значит что мне нравятся твои булки. Я булочник и мне нравятся твои булки, хотя будь я молочником я бы тоже говорил, что мне нравятся твои булки. Все будут говорить, что мне нравятся твои булки."

После запуска макроса, и замены на фразу человек-молекула, должно получится следующее:

"Привет, человек-молекула. Мне все говорят человек-молекула, а я им в ответ мне нравятся твои булки. Хотя это не значит что мне нравятся твои булки. Я булочник и человек-молекула, хотя будь я молочником я бы тоже говорил, что человек-молекула. Все будут говорить, что мне нравятся твои булки."

Как заменить все фразы, я знаю. А вот как перебрать найденные фразы и заменить только определенные - не знаю.
0
15155 / 6428 / 1731
Регистрация: 24.09.2011
Сообщений: 9,999
12.10.2018, 09:00
Лучший ответ Сообщение было отмечено юный_падаван как решение

Решение

юный_падаван,
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
Sub Макрос1()
Const FND = "мне нравятся твои булки"
Const RPL = "человек-молекула"
Dim r As Range, i&
  Set r = ActiveDocument.Range
  With r.Find
    .ClearFormatting
    .Text = FND
    .Forward = True
    .Wrap = wdFindStop
    .Format = False
    .MatchCase = False
    .MatchWholeWord = True
    .MatchWildcards = False
    While .Execute
      If i Mod 4 < 2 Then
        r.Text = RPL
        r.Collapse wdCollapseEnd
      End If
      i = i + 1
    Wend
  End With
End Sub
1
1 / 1 / 1
Регистрация: 29.05.2015
Сообщений: 13
12.10.2018, 17:19  [ТС]
Спасибо, все отлично. То что нужно.
правильно ли я понял?:
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
Const FND = "мне нравятся твои булки" 'строчки под замену
Const RPL = "человек-молекула"
Dim r As Range, i& 
  Set r = ActiveDocument.Range 'объявляем диапазон - весь документ
  With r.Find 'поиск со следующими параметрами
    .ClearFormatting 'удаляем форматирование
    .Text = FND 'что ищем
    .Forward = True 'ищем вперед
    .Wrap = wdFindStop 'завершить поиск по достижении конца диапазона - документа
    .Format = False 'выключить форматирование, чтобы это не значило)
    .MatchCase = False 'на регистр не смотреть
    .MatchWholeWord = True 'только текст целиком, если является частью слова то пропустить
    .MatchWildcards = False 'текст для поиска без подстановочных знаков, чтобы это не значило)
    While .Execute ' запускаем поиск, входим в цикл если что-то нашли.
'не совсем понятен алогритм работы, я так понимаю если написать "If (.Execute) then..." ничего не получится
      If i Mod 4 < 2 Then 'условие для замены/незамены
      r.Text = RPL  'получается весь диапазон документа съеживается до найденной строки,
' которую мы перезаписываем
      r.Collapse wdCollapseEnd 'тут происходит магия: сбрасывается диапазон в конечную позцию, 
'то бишь в конец замененной строки вроде как
      End If
      i = i + 1 'счетчик считает
    Wend
1
15155 / 6428 / 1731
Регистрация: 24.09.2011
Сообщений: 9,999
14.10.2018, 00:32
Цитата Сообщение от юный_падаван Посмотреть сообщение
получается весь диапазон документа съеживается до найденной строки, которую мы перезаписываем
Примерно так В случае успешного поиска переменной r присваивается ссылка на найденную строку.
Метод r.Find.Execute возвращает True в случае успешного поиска и False, если ничего не найдено. Поэтому .Execute удобно использовать как условие цикла While или Do While.
Чтобы было нагляднее, вставьте строку r.Select после While и после Collapse и пройдите код по шагам - F8.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
14.10.2018, 00:32
Помогаю со студенческими работами здесь

Разработать приложение, которое оценивает сложность текста документа по доле сложных фраз в нем
(Word) Существует рекомендация, согласно которой фразы длиной более 16 слов считаются трудными для...

Чередование объектов в объекте
Есть такая тема. Кто-нибудь играл в пятнашки или в ротацию на телефоне Nokia. Тема такая подвести...

Массивы(объединение и чередование)
даны два массива A и B по 10 элементов. Объедините эти массивы в массив С так чтобы элементы...

Чередование цветом строк в 2 таблицах
Добрый день и всех с праздниками))) Есть 2 таблицы, в одну из которых тянутся данные из...

Объединение двух массивов в один с чередованием элементов исходных массивов.
Вариант 4 (упр 1 и 2)Помогите написать ребят! в частности не получается написать 2 задачу с...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
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. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru