I have a VBA macro for Microsoft Word that I am trying to improve.
The purpose of the macro is to bold and italicize all words in a document that match the search terms in the first table of the document.
The problem is the search terms include wildcards which are the following:
the hyphen «-«: between letters a wildcard for either a space or a period
asterisk «&»: (the site is not letting me put in asterisks as this is the markdown for italicize, so I’ll put in the & symbol instead to get around the filters) a wildcard for any number of characters at the beginning of a word or at the end. Unlike normal programming languages though, when it is used in the middle of the word it needs to be combined with the hyphen to be a wildcard for a range of characters. For example «th&-e» would pick up «there» while «th&e» would not.
question mark «?»: wildcard for a single character
What I am doing so far is just testing for these characters and if they are present I either lop them off in the case of the asterisk, or I alert the user that they have to search for the word manually. Not ideal
I have tried the .MatchWildcard property in VBA but have not yet gotten it to work. I have a feeling it has something to do with the replacement text, not the search text.
A working macro will take the following as its input (the first row is intentionally ignored and the second column is the one with the target search terms):
Imagine this in a table all in the second column (as the html allowed here doesn’t allow tr and td etc)
First row: Word
Second row: Search
Third row: &earch1
Fourth row: Search2&
Fifth row: S-earch3
Sixth row: S?arch4
Seventh row: S&-ch5
And it will search the document and replace with bold and italicized content like so:
Search Search1 Search2 Search3 Search4 Search5
Note: S-earch3 could also pick up S.earch3 and replace with Search3
As one might assume the search terms will usually not be right next to each other — the macro should find all instances.
I will include my attempted but nonfunctional code as well after the first working macro.
The code for the working macro will be on pastebin for a month from today, which is 9/17/09, at the following url.
Thanks again for any thoughts and help you might have to offer!
Sara
Working VBA Macro:
Sub AllBold()
Dim tblOne As Table
Dim celTable As Cell
Dim rngTable As Range
Dim intCount As Integer
Dim celColl As Cells
Dim i As Integer
Dim rngLen As Integer
Dim bolWild As Boolean
Dim strWild As String
Set tblOne = ActiveDocument.Tables(1)
intCount = tblOne.Columns(2).Cells.Count
Set celColl = tblOne.Columns(2).Cells
strWild = ""
For i = 1 To intCount
If i = 1 Then
i = i + 1
End If
Set celTable = ActiveDocument.Tables(1).Cell(Row:=i, Column:=2)
Set rngTable = ActiveDocument.Range(Start:=celTable.Range.Start, _
End:=celTable.Range.End - 1)
rngLen = Len(rngTable.Text)
bolWild = False
If (Mid(rngTable.Text, rngLen, 1) = "&") Then 'remember to replace & with asterisk!'
rngTable.SetRange Start:=rngTable.Start, End:=rngTable.End - 1
End If
If (Mid(rngTable.Text, 1, 1) = "&") Then 'remember to replace & with asterisk!'
rngTable.SetRange Start:=rngTable.Start + 1, End:=rngTable.End
End If
If InStr(1, rngTable.Text, "-", vbTextCompare) > 0 Then
strWild = strWild + rngTable.Text + Chr$(13)
bolWild = True
End If
If InStr(1, rngTable.Text, "?", vbTextCompare) > 0 Then
strWild = strWild + rngTable.Text + Chr$(13)
bolWild = True
End If
If (bolWild = False) Then
Dim oRng As Word.Range
Set oRng = ActiveDocument.Range
With oRng.Find
.ClearFormatting
.Text = rngTable.Text
With .Replacement
.Text = rngTable.Text
.Font.Bold = True
.Font.Italic = True
End With
.Execute Replace:=wdReplaceAll
End With
End If
Next
If bolWild = True Then
MsgBox ("Please search the following strings with - or ? manually:" + Chr$(13) + strWild)
End If
End Sub
Attempted Nonfunctional VBA Macro:
Sub AllBoldWildcard()
Dim tblOne As Table
Dim celTable As Cell
Dim rngTable As Range
Dim intCount As Integer
Dim celColl As Cells
Dim i As Integer
Dim rngLen As Integer
Dim bolWild As Boolean
Dim strWild As String
Dim strWildcard As String
Set tblOne = ActiveDocument.Tables(1)
intCount = tblOne.Columns(2).Cells.Count
Set celColl = tblOne.Columns(2).Cells
strWild = ""
For i = 1 To intCount
If i = 1 Then
i = i + 1
End If
Set celTable = ActiveDocument.Tables(1).Cell(Row:=i, Column:=2)
Set rngTable = ActiveDocument.Range(Start:=celTable.Range.Start, _
End:=celTable.Range.End - 1)
rngLen = Len(rngTable.Text)
bolWild = False
If (Mid(rngTable.Text, 1, 1) = "&") Then 'remember to replace & with asterisk!'
rngTable.SetRange Start:=rngTable.Start + 1, End:=rngTable.End
End If
If InStr(1, rngTable.Text, "&", vbTextCompare) > 0 Then 'remember to replace & with asterisk!'
strWildcard = rngTable.Text
rngTable.Text = Replace(rngTable.Text, "&", "", 1) 'remember to replace & with asterisk!'
bolWild = True
End If
If InStr(1, rngTable.Text, "-", vbTextCompare) > 0 Then
strWildcard = Replace(rngTable.Text, "-", "[.-]", 1)
bolWild = True
End If
If InStr(1, rngTable.Text, "?", vbTextCompare) > 0 Then
strWild = strWild + rngTable.Text + Chr$(13)
strWildcard = Replace(rngTable.Text, "?", "_", 1)
bolWild = True
End If
If (bolWild = False) Then
Dim oRng As Word.Range
Set oRng = ActiveDocument.Range
With oRng.Find
.ClearFormatting
.Text = strWildcard
.MatchAllWordForms = False
.MatchSoundsLike = False
.MatchFuzzy = False
.MatchWildcards = True
With .Replacement
.Text = rngTable.Text
.Font.Bold = True
.Font.Italic = True
End With
.Execute Replace:=wdReplaceAll
End With
End If
Next
' If bolWild = True Then'
' MsgBox ("Please search the following strings with - or ? manually:" + Chr$(13) + strWild)'
' End If'
End Sub
У меня проблемы с поиском рабочего решения уже пару часов. Надеюсь, вы мне поможете.
Моя проблема: мне нужно найти и выбрать в Word целое предложение после указания начальной и конечной строк конкретного предложения. Например, если моя начальная строка — «Люди», а конечная — «яблоки». Я ожидаю, что Word выберет все «Люди любят красные яблоки». предложение в моем документе. (Если такое предложение существует)
Для этого я подготовил макрос, который работает почти так, как я хочу. Единственная проблема заключается в том, что он не выбирает наименьший возможный набор символов (что я и хочу сделать). Чтобы было понятно, предположим, что в моем документе есть этот текст: People like smoking. People like red apples.
Теперь, когда я предоставляю макросу начальную и конечную строки соответственно как «Люди» и «яблоки», он выбирает весь текст, который содержит 2 предложения, упомянутые выше. В этом моя проблема: я хотел, чтобы было выбрано только второе предложение (People like red apples.
), а не оба, даже если они начинаются с одного и того же слова. Так что, по сути, я всегда хочу выбрать максимально короткий набор символов (в данном случае это только последнее предложение).
Вот часть моего макроса в VBA:
`text_str = startStr & "*" & endStr
With Application.Selection.Find
.ClearFormatting
.Forward = True
.Wrap = wdFindContinue
.Text = text_str
.MatchWildcards = True
.MatchCase = True
.Execute
End With
Я знаю, что проблема связана с подстановочными знаками (или очень ограниченным набором регулярных выражений), поэтому я также попробовал что-то вроде этого в качестве строки поиска:
text_str = "(" & startStr & "*){1}" & endStr
Тоже не помогло. Я застрял здесь. :/
Спасибо за любые предложения!
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 и д теперь нет пробела). Но все-равно, ' например, если в документе слово "какое-нибудь" будет записано как "какое - нибудь", данный пример ' посчитает его за два. Точная подгонка под свои нужды - дело рук "нуждающегося" ! Всем удачи!!! ' ... |
Вы не вошли. Пожалуйста, войдите или зарегистрируйтесь.
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Сообщений [ 3 ]
1 17.09.2012 12:40:36
- Spare
- сержант
- Неактивен
- Зарегистрирован: 17.09.2012
- Сообщений: 19
- Поблагодарили: 1
Тема: VBA метод Find c символами подстановки
Добрый день, уважаемые форумчане.
Пытаюсь в документе найти текст с символами подстановки «[звездочка]»
В документе он должен находить к примеру [1tr96]
Подскажите пожалуйста как это можно реализовать?
Sub ups()
Set myRange = ActiveDocument.Content
With myRange.Find
.ClearFormatting
.Text = "["
.MatchAllWordForms = False
.MatchSoundsLike = False
.MatchFuzzy = False
'.MatchWholeWord = True
.MatchWildcards = True
.Execute Format:=False, Forward:=True
If .Found = True Then
MsgBox myRange
End If
End With
End Sub
2 Ответ от aap77 17.09.2012 13:02:44
- aap77
- генерал-полковник
- Неактивен
- Зарегистрирован: 12.09.2011
- Сообщений: 925
- Поблагодарили: 243
- За сообщение: 1
Re: VBA метод Find c символами подстановки
Вот макрос который ищет текст заключенный в квадратные скобки.
Sub Find1()
Selection.Find.ClearFormatting
With Selection.Find
.Text = "[[]?*[]]"
.Forward = True
.Wrap = wdFindContinue
.Format = False
.MatchWildcards = True
.Execute
Do While .Found = True
MsgBox Selection.Range
.Execute
Loop
End With
End Sub
Цикл Do While .Found = True продолжается до тех пор, пока находится текст.
3 Ответ от Spare 17.09.2012 13:12:27
- Spare
- сержант
- Неактивен
- Зарегистрирован: 17.09.2012
- Сообщений: 19
- Поблагодарили: 1
Re: VBA метод Find c символами подстановки
Большое спасибо, очень выручили
Сообщений [ 3 ]
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Похожие темы
- Макрос подстановки текста из файла заготовок
- метод Слияние, сохранить в новых файлах с уникальным названием
- Добавление определённого символа между символами
- поиск в ворде между определенными по счету символами
- VBA Find c циклом
- Range.Find VBA
- Find and Replase в колонтитулах
- Как работает .Range.Find.Execute?
VBA метод Find c символами подстановки
Для тех пользователей, кому по роду деятельности приходится много работать с редактором Microsoft Word, будет не лишним узнать о возможностях облегчить и ускорить свой труд. Наш сайт о Microsoft Office Word даст ответ про: как открыть документ doc если нету word.
Все о Ворде вы найдете на сайте и форуме Ворд Эксперт.
Главное внимание здесь уделено автоматизации различных операций, таких как, составление списков, таблиц, оглавлений, редактирование текстов. Наш сайт о Microsoft Office Word даст ответ про: самые упоминаемые слова на странице.
Здесь можно научиться писать шаблоны и макросы для операций, начиная с простейших, или найти готовое решение и ответы на вопросы по поводу функций и настроек любой версии приложения. На портале о Microsoft Office Word вы узнаете про: редим примечаний ворд 2003.
Также на форуме можно оставить заявку на любую работу, касающуюся Ворда.
Макросы в Word — это такая полезная штука, которую просто обязан знать каждый, кто много работает с текстами.
Предысторию написания данной статьи, а также ее полезность можно оценить по видеоролику.
Макросы — теория
Теперь немного теории. Как известно, в текстовом редакторе Word есть очень полезная функция «Найти и заменить« (вызывается через сочетание клавиш Ctrl+H или меню «Правка» -> «Заменить…»), которой, к сожалению, пользуются не так часто. Но еще реже используют данную функцию в режиме «Подстановочные знаки«.
А между тем данное умение может принести неоценимую пользу. Свое знакомство с подстановочными знаками и их изучение можно начать со статьи Сергея Хозяинова (будет полезна для новичков).
Я же хочу рассказать о более конкретных случаях применения этого знания, а именно: использование замены с помощью подстановочных знаков и форматирование текста в макросах.
Макросы — это такие полезные штуки, которые позволяют автоматизировать часто выполняемые операции (в случае примера на видео, это форматирование текста). О способах записи и создания макросов можно найти тысячи статей на просторах Интернета. Нас же будет интересовать вариант, при котором макрос записывается вручную во встроенном в Word редакторе Visual Basic. Суть использования макросов мною основана на принципе конструктора: макрос состоит из набора кирпичиков-функций, которые заранее прописаны и могут размещаться в любой требуемой последовательности. Каждая же из функций является действием, либо набором действий, она имеет свое уникальное имя. В макросе же надо лишь указать имя функции для ее вызова.
Макросы — практика
‘заменяет дефис в начале абзаца на тире
ActiveDocument.Content.Find.ClearFormatting
ActiveDocument.Content.Find.Replacement.ClearFormatting
With ActiveDocument.Content.Find
.Text = «^p- »
.Replacement.Text = «^p^= »
.Forward = True
.Wrap = wdFindContinue
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
.Execute Replace:=wdReplaceAll
End With
End Function
Function Tire2()
‘заменяет дефис окруженный пробелами на тире
ActiveDocument.Content.Find.ClearFormatting
ActiveDocument.Content.Find.Replacement.ClearFormatting
With ActiveDocument.Content.Find
.Text = » — »
.Replacement.Text = » ^= »
.Forward = True
.Wrap = wdFindContinue
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
.Execute Replace:=wdReplaceAll
End With
End Function
Function Defis()
‘заменяет тире в начале абзаца на дефис
ActiveDocument.Content.Find.ClearFormatting
ActiveDocument.Content.Find.Replacement.ClearFormatting
With ActiveDocument.Content.Find
.Text = «^p^=»
.Replacement.Text = «^p-»
.Forward = True
.Wrap = wdFindContinue
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
.Execute Replace:=wdReplaceAll
End With
End Function
Function Prob()
‘заменяет множественные пробелы на одиночный
‘удаляет множественные и одиночные пробелы в начале абзаца
‘удаляет множественные и одиночные пробелы в конце абзаца
‘удаляет знаки абзаца идущие до текста в начале документа
‘и знаки абзаца идущие после текста в конце документа
ActiveDocument.Content.Find.ClearFormatting
ActiveDocument.Content.Find.Replacement.ClearFormatting
With ActiveDocument.Content.Find
.MatchWildcards = False
.Execute «^w», , , , , 0, , , 0, » «, 2
.Execute «^p^w», , , , 0, , , , 0, «^p», 2
.Execute «^w^p», , , , 0, , , , 0, «^p», 2
End With
If ActiveDocument.Paragraphs.Count > 1 Then
Do While ActiveDocument.Paragraphs.Last.Range.Text = Chr(13) And _
ActiveDocument.Paragraphs.Count > 1
ActiveDocument.Paragraphs.Last.Range.Delete
Loop
End If
Selection.HomeKey wdStory
While Selection.Paragraphs.First.Range.Characters.Count = 1
Selection.Paragraphs.First.Range.Delete
Wend
End Function
Function Format()
‘весь текст делает 14 размером TimesNewRoman
‘с 1,5 интервалом и выравнивает его по ширине
ActiveDocument.Content.Font.Name = «Times New Roman»
ActiveDocument.Content.Font.Size = 14
ActiveDocument.Content.ParagraphFormat.LineSpacing = LinesToPoints(1.5)
ActiveDocument.Content.ParagraphFormat.Alignment = wdAlignParagraphJustify
Selection.HomeKey wdStory
End Function
Function Format2()
‘весь текст делает 11 размером Arial
‘с 1,5 интервалом и выравнивает его по ширине
ActiveDocument.Content.Font.Name = «Arial»
ActiveDocument.Content.Font.Size = 11
ActiveDocument.Content.ParagraphFormat.LineSpacing = LinesToPoints(1.5)
ActiveDocument.Content.ParagraphFormat.Alignment = wdAlignParagraphJustify
Selection.HomeKey wdStory
End Function
Function Zagol()
‘делает заголовок (первый абзац) документа жирным
‘и выравнивает его по центру
ActiveDocument.Paragraphs(1).Range.Select
Selection.Font.Bold = True
Selection.ParagraphFormat.Alignment = wdAlignParagraphCenter
Selection.HomeKey wdStory
End Function
Function Symb()
‘Подсчитывает количество символов в документе
‘и выводит сообщение
spacecount = ActiveDocument.Content.ComputeStatistics(Statistic:=wdStatisticCharactersWithSpaces)
MsgBox «В тексте содержится символов (включая пробелы) — » & spacecount & » »
End Function
Function Krasn()
‘Делает красный шрифт у выделенного слова
Selection.Font.Color = wdColorRed
End Function
Function Intjyr()
‘Выделяет жирным все вопросы «И:»
ActiveDocument.Content.Find.ClearFormatting
ActiveDocument.Content.Find.Replacement.ClearFormatting
With ActiveDocument.Content.Find
.Text = «(^0013^0013И:)(*)(^0013)»
.MatchWildcards = True
.Forward = True
.Replacement.Text = «123″
.Replacement.Font.Bold = True
.Execute Replace:=wdReplaceAll
End With
End Function
Function One_to_Two()
‘Разделяет одно предложение на два (перед выполнением курсор ставить после запятой)
Selection.TypeBackspace
Selection.TypeText Text:=».»
Selection.MoveRight Unit:=wdCharacter, Count:=1
Selection.Range.Case = wdTitleSentence
End Function
Function Two_to_One()
‘Склеивает два предложения в одно (перед выполнением курсор ставить после точки)
Selection.TypeBackspace
Selection.TypeText Text:=»,»
Selection.MoveRight Unit:=wdCharacter, Count:=1
Selection.Range.Case = wdTitleSentence
End Function
Function Nimerstr()
‘Вставляет нумерацию страниц справа вверху
Selection.Sections(1).Headers(1).PageNumbers.Add PageNumberAlignment:= _
wdAlignPageNumberRight, FirstPage:=True
End Function
Function MastifTime()
‘Находит и заменяет тайм-коды в обычном формате (чч:мм:сс), на формат
‘требуемый для Мастифа (чч-мм-сс)
ActiveDocument.Content.Find.ClearFormatting
ActiveDocument.Content.Find.Replacement.ClearFormatting
With ActiveDocument.Content.Find
.Text = «(^0013)(([0-9]@:[0-9]@:[0-9]@))»
.MatchWildcards = True
.Forward = True
.Replacement.Text = «12»
.Execute Replace:=wdReplaceAll
End With
ActiveDocument.Content.Find.ClearFormatting
ActiveDocument.Content.Find.Replacement.ClearFormatting
With ActiveDocument.Content.Find
.Text = «:([0-9]@):»
.MatchWildcards = True
.Forward = True
.Replacement.Text = «-1-»
.Execute Replace:=wdReplaceAll
End With
End Function
Function Troetoch()
‘Заменяет три точки идущие подряд на знак троеточия
ActiveDocument.Content.Find.ClearFormatting
ActiveDocument.Content.Find.Replacement.ClearFormatting
With ActiveDocument.Content.Find
.Text = «…»
.Replacement.Text = «…»
.Forward = True
.Wrap = wdFindContinue
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
.Execute Replace:=wdReplaceAll
End With
End Function
Function Tehnik()
‘Ищет в тексте технические надписи в скобках
‘если они прописаны без точки, то перед закрывающей скобкой ставится точка,
‘если они написаны (случайно) не курсивом, то выделяются им
Dim MyCollection As New Collection
With MyCollection
.Add («Аплодисменты»)
.Add («Говорят одновременно»)
.Add («Дефект записи»)
.Add («Дефект звука»)
.Add («Смена кадра»)
.Add («Обрыв записи»)
.Add («Техническая съемка»)
.Add («Техническая реплика»)
.Add («Технический разговор»)
.Add («Конец просмотра видеоролика»)
.Add («Начало просмотра видеоролика»)
.Add («Просмотр видеоролика»)
.Add («Возобновление тайм-кода»)
.Add («Остановка тайм-кода»)
.Add («Смена тайм-кода»)
.Add («Смех»)
.Add («Смеется»)
.Add («Кашель»)
.Add («Кашляет»)
End With
Dim i As Integer
For i = 1 To MyCollection.Count
ActiveDocument.Content.Find.ClearFormatting
ActiveDocument.Content.Find.Replacement.ClearFormatting
With ActiveDocument.Content.Find
.Text = «((» & MyCollection.Item(i) & «))»
.MatchWildcards = True
.Forward = True
.Replacement.Text = «(1.)»
.Replacement.Font.Italic = True
.Execute Replace:=wdReplaceAll
End With
ActiveDocument.Content.Find.ClearFormatting
ActiveDocument.Content.Find.Replacement.ClearFormatting
With ActiveDocument.Content.Find
.Text = «((» & MyCollection.Item(i) & «.))»
.MatchWildcards = True
.Forward = True
.Replacement.Text = «(1)»
.Replacement.Font.Italic = True
.Execute Replace:=wdReplaceAll
End With
Next i
End Function
Sub Zamena()
‘ Комплекс последовательных функций при форматировании работ всех видов кроме Первого канала.
Prob
Tire2
Tire
Troetoch
Nimerstr
Tehnik
Symb
End Function
Sub Zamena2()
‘ Комплекс последовательных функций при форматировании работ Первого канала.
Prob
Defis
Tire2
Troetoch
Nimerstr
Tehnik
Symb
End Function
Sub ФОРМАТ()
Format
Prob
Tire2
Tire
Troetoch
Intjyr
Tehnik
Nimerstr
Zagol
Symb
End Sub
Sub МАСТИФ()
Format2
Prob
Intjyr
Tehnik
MastifTime
Nimerstr
Zagol
Symb
End Sub
Прописав это и сохранив в шаблоне «Normal.dot« можно получить доступ к этим макросам из любого документа. Вызывается окно выбора макросов горячей клавишей Alt+F8.
Я предпочитаю использовать кнопки на панели инструментов. Поместить на нее кнопку и привязать к ней макрос очень легко. Об этом доступно написано в данной статье.
Данная статья затронула обширную тему, которая, прежде всего, нацелена на понимание и самостоятельное изучение вопроса. Поэтому более подробно расписывать не стал. Но всегда можно задать вопросы в комментариях.