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

Вставка слов в Word VBA

04.02.2018, 22:31. Показов 2294. Ответов 3
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Уважаемые программисты. Подскажите пожалуйста. Как сделать так чтобы, в документе Word, в выделенном фрагменте текста, после каждого 4-го слова вставляет, указанный предлог, например (да),

пример кода с которым не могу разобраться

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Sub Format()
Selection.Find.ClearFormatting
Selection.Find.Replacement.ClearFormatting
Selection.Find.Execute Replace:=wdReplaceAll
Set myrange = ActiveDocument.Range(Selection.Start, Selection.End)
With Selection.Find
.Text = "  "
.Replacement.Text = " да "
.Replacement.Font.Size = 1
.Replacement.Font.Color = wdColorWhite
.Forward = True
.Wrap = wdFindContinue
.Format = True
.MatchCase = True
.MatchWholeWord = True
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
Selection.Find.Execute Replace:=wdReplaceAll
End Sub
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
04.02.2018, 22:31
Ответы с готовыми решениями:

Вставка фото VBA Word
Здравствуйте! Мне нужен код, чтобы пользователь сам выбрал картинку и еще один код, чтобы эта...

Вставка текста в Word средствами VBA
Создаю вордовский документ, в который потом вставлю из Екселя таблицу. Перед этим надо напечатать в...

Вставка картинок из папки вместо слов (макрос в Word)
Добрый день! Подскажите, пожалуйста, как осуществить множественную замену слов на картинки? Важно...

VBA Word выделение слов,написанных латинскими буквами
Создать макрос, выделяющий слова, написанные латинскими буквами. Есть макрос,который просто...

3
35 / 32 / 15
Регистрация: 23.12.2014
Сообщений: 97
05.02.2018, 01:40 2
Код - в модуль, текст - выделить мышкой, Макрос1 - выполнить...
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
Sub Макрос1()
    With Selection.Find
        .Forward = True
        .Wrap = wdFindContinue
        .MatchWildcards = True
        .Text = "^0013^0013"
        .Replacement.Text = " +=++=+"
        .Execute Replace:=wdReplaceAll
        .Text = "^0013"
        .Replacement.Text = " +==+"
        .Execute Replace:=wdReplaceAll
        .Text = " @-@ @"
        .Replacement.Text = " +=---=+"
        .Execute Replace:=wdReplaceAll
        .Text = "<(*[^0013 ]@*[^0013 ]@*[^0013 ]@*)([^0013 ]@)"
        .Replacement.Text = "\1 да "
        .Execute Replace:=wdReplaceAll
        .Text = " +=---=+"
        .Replacement.Text = " - "
        .Execute Replace:=wdReplaceAll
        .Text = " +==+"
        .Replacement.Text = "^0013"
        .Execute Replace:=wdReplaceAll
        .Text = " +=++=+"
        .Replacement.Text = "^0013^0013"
        .Execute Replace:=wdReplaceAll
    End With
End Sub
1
0 / 0 / 0
Регистрация: 16.11.2011
Сообщений: 23
05.02.2018, 06:46  [ТС] 3
а можешь пожалуйста закоментить, строки?
0
35 / 32 / 15
Регистрация: 23.12.2014
Сообщений: 97
05.02.2018, 14:46 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
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
61
62
63
64
65
66
67
68
69
70
71
Sub Макрос1()   ' точка входа макроса после нажатия "Макросы->Выполнить..."
' Ключевое слово Width указывает, что все остальные строки, начинающиеся c ".",
' являются "подсвойствами" и "подметодами" для метода, указанного за этим ключевым
' словом, то есть ".Forward" на самом деле разворачивается в "Selection.Find.Forward"
    With Selection.Find ' метод операции поиска, аналог меню "Найти..." в коде VBA
        .Forward = True ' поиск вперед
        .Wrap = wdFindContinue  ' "автосогласие" на продолжение поиска после, например, замены
        .MatchWildcards = True  ' будем работать с подстановочными знаками для поиска.
        ' Что означает каждый подстановочный знак - это в Справку Word или в Интернет...
        
        ' Операция замены может "порушить" (и обязательно "порушит") все форматирование
        ' документа, поэтому будем проводить ее в несколько проходов
        
        .Text = "^0013^0013"    'сначала ищем двойной символ "конец абзаца", обычно - это конец документа
        .Replacement.Text = " +=++=+"   ' и временно заменяем его на уникальную комбинацию символов,
        ' заведомо не встречающуюся в "нормальных" документах, поэтому включаем весь свой идиотизм,
        ' но не полностью, чтобы самим потом не забыть эту комбинацию. Внимание! Так как "конец абзаца"
        ' по-совместительству является еще и концом какого-нибудь слова, то чтобы потом нормально искать
        ' каждое четвертое слово, в эту уникальную комбинацию вначале добавляем пробел (он не виден,
        ' но он есть - как тот суслик)
        .Execute Replace:=wdReplaceAll  ' непосредственно запускаем команду поиска, но указываем параметр
        ' который в VBA является аналогом перехода на вкладку "Найти и заменить..." в меню "Найти..." и
        ' присваиваем ему значение области поиска и замены - везде - то есть по всему документу
        .Text = "^0013" ' готовим 2 проход - будем искать одинарные знаки "конец абзаца"
        .Replacement.Text = " +==+" ' тоже уникальная комбинация, но другая !
        .Execute Replace:=wdReplaceAll  ' и опять поиск и замена, уже нам известная
        .Text = " @-@ @" ' в документах, особенно грамотных, иногда встречаются дефисы между словами,
        ' и очень часто (настолько, что всегда) они отделяются от слов пробелами, поэтому при поиске
        ' каждого четвертого слова мы можем случайно посчитать этот дефис как отдельное слово. Чтобы
        ' не лохануться, заменим-ка дефис, вместе с окружающими его пробелами, на еще более уникальную
        ' комбинацию, причем с одной стороны будет пробел, а с другой стороны мы ее "прикрепим"
        ' к рядом стоящему слову, чтобы потом посчитать его как одно целое с дефисом, точнее с этой
        ' уникальной комбинацией, временно заменяющей дефис
        .Replacement.Text = " +=---=+" ' вот эта третья уникальная комбинация !
        .Execute Replace:=wdReplaceAll ' снова поиск и замена, это уже третий проход
        .Text = "<(*[^0013 ]@*[^0013 ]@*[^0013 ]@*[^0013 ]@)" ' а этот набор подстановочных знаков
        ' как раз ищет и выделяет сразу четыре подряд идущих слова, разделенных пробелами, причем наши
        ' "уникальные" комбинации с одной стороны тоже "прикреплены" к какому нибудь слову, поэтому
        ' временно "входят" в состав этого слова. Знак < означает, что выделение начинается прямо с
        ' начальной буквы (или символа) первого слова, а круглые скобки означают, что мы "группируем"
        ' все наше "четырехсловное" выделение. Остальные подробности по знакам - в Справку или Интернет
        .Replacement.Text = "\1да " ' готовим то, на что будем менять : комбинация \1 означает ту самую
        ' выделенную "группу", которую при замене мы должны оставить как есть, но к ней добавим наше
        ' "слово-паразит" (назвать его предлогом у меня не повернется язык и не согнутся пальцы, чтобы
        ' набрать на клавиатуре), то есть "да " (с пробелом в конце). Итоговая строка: "\1да "
        .Execute Replace:=wdReplaceAll ' фактические поиск и замена, это уже четвертый проход
        .Text = " +=---=+"  ' а теперь, когда "слова-паразиты" расставлены, возвращаем наше исходное
        ' форматирование документа, последовательно, в обратном порядке, меняя наши уникальные
        ' комбинации на те символы, которые были временно заменены этими комбинациями. То есть сейчас
        ' на этом проходе будем менять " +=---=+" на...
        .Replacement.Text = " - "   ' ... на дефис с пробелами вокруг него
        .Execute Replace:=wdReplaceAll ' и сама замена, пятый проход
        .Text = " +==+" ' еще одну "кракозябру" ...
        .Replacement.Text = "^0013" ' на код "конец параграфа"
        .Execute Replace:=wdReplaceAll ' сама замена, шестой проход
        .Text = " +=++=+" ' и последняя (которая на первом проходе была первой) "кракозябра"
        .Replacement.Text = "^0013^0013" ' на код конца документа
        .Execute Replace:=wdReplaceAll ' здесь мы фактически выполняем операцию замены, седьмой проход
    End With ' и коректно, по правилам VBA
End Sub ' завершаем выполнение макроса. Всем спасибо!
 
' Конечно же "парсинг" документа (это то, чем мы примерно занимались), весьма чувствительная к
' содержимому и структуре документа процедура и данный пример ни в коем случае не совершенен. Даже
' сейчас, комментируя программу, я заменил некоторые подстановочные знаки, исправив небольшие
' погрешности: "четырехсловный" поиск - было: <(*[^0013 ]@*[^0013 ]@*[^0013 ]@*)([^0013 ]@)
' стало <(*[^0013 ]@*[^0013 ]@*[^0013 ]@*[^0013 ]@) - убрал две лишние круглые скобки внутри. И
' вторая погрешность: подстановочный код "на что меняем" на этом же, четвертом проходе, был: "\1 да ",
' что добавляло лишний пробел, а теперь: "\1да " (между 1 и д теперь нет пробела). Но все-равно,
' например, если в документе слово "какое-нибудь" будет записано как "какое - нибудь", данный пример
' посчитает его за два. Точная подгонка под свои нужды - дело рук "нуждающегося" ! Всем удачи!!!
' ...
4
05.02.2018, 14:46
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
05.02.2018, 14:46
Помогаю со студенческими работами здесь

Поиск предложения с мин кол-вом слов в Word на VBA
Здравствуйте, Помогите, пожалуйста, помочь другу. Другу надо сделать задание в Word на VBA....

MS Word VBA. Поиск выделенных жёлтым фоном слов, их группировка в конце документа
Здравствуйте, в большом тексте есть выделенные желтым фоном слова. Можно ли с помощью VBA...

Поиск слов такого типа <* слово , .*> и замена их на другие слова средствами Word-VBA
Есть кнопка в документе,при открытии появляется форма где видно несколько полей,куда нужно вписать...

Ввести массив слов, вывести в документ WORD список слов и статистику букв
Разработать программу, которая запрашивает у пользователя количество слов, которое он хотел бы...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru