Как найти все сокращения в документе MS Word с помощью макроса?
У меня есть документ со многими аббревиатурами, которые нужно записать и поместить в таблицу сокращений в конце документа.
Термин аббревиатура имеет различные значения. Я хотел бы создать таблицу, в которой есть все слова, которые инициализируются; две или более заглавные буквы, которые являются короткими для более длинного значения. Т.е. CD-ROM, USB, SYNC, MMR, ASCAP и т. Д.
Как мне создать макрос для этого?
5 ответов
Нечто подобное может начать вас. Добавьте ссылку на "Регулярные выражения Microsoft VBScript" ("Редактировать макрос: Инструменты> Ссылки"). Эта библиотека представляет собой файл "vbscript.dll".
Возможно, вам придется настроить регулярное выражение, если все ваши аббревиатуры не только заглавные буквы (например, некоторые могут содержать цифры).
Sub Acronyms()
Dim dict, k, tmp
Dim regEx, Match, Matches
Dim rngRange As Range
Set regEx = New RegExp
Set dict = CreateObject("scripting.dictionary")
regEx.Pattern = "[A-Z]{2,}" '2 or more upper-case letters
regEx.IgnoreCase = False
regEx.Global = True
Set Matches = regEx.Execute(ActiveDocument.Range.Text)
For Each Match In Matches
tmp = Match.Value
If Not dict.Exists(tmp) Then dict.Add tmp, 0
dict(tmp) = dict(tmp) + 1
Next
For Each k In dict.Keys
Debug.Print k, dict(k)
Next k
End Sub
Спасибо, Тим, ваш код работает отлично!
Если это будет полезно для других, шаблон [A-Z]{1,}([a-z]*|\&|\.*)[A-Z]{1,}
найдете больше сокращений...
(У меня нет разрешения на публикацию комментариев, поэтому я добавляю это как ответ)
Изменить (все еще нет возможности добавлять комментарии): \b[A-Z]{1,}([a-z*]|\&|\.|\-)[A-Z]{1,}\b
является более устойчивым, но потерпит неудачу, если последний символ аббревиатуры не будет прописным.
Я нашел следующие работы хорошо (где некоторые аббревиатуры названия компании терпимы). Я использую это для проверки ввода данных в Access, он также должен работать для диапазона документов Word.
objRegExp.Pattern = "([A-Z]{1,}((\&(?![A-Z]\s[\w]{3})\w*)+|\.\w*)+)|[A-Z]{2,}(?![A-Z]*\s[A-Z]{1}[a-z])"
- J & K = Матч
- JK&S = Матч
- JSS = совпадение
- JK & S.K = Match
- JSK = Матч
- JK = Матч
- DKD And Sons = Нет совпадений
- J&K Engineering = Нет совпадения
- PKF Rogers and Associates = Нет совпадений
Я использую RegExHero для проверки своих выражений
Я использовал следующее, чтобы найти сокращения в моей докторской диссертации. Все они были в "()".
regEx.Pattern = "\([A-Z]{1,}([a-z]*|\&|\.|\-*)[A-Z]{1,}\)"
Вы будете запускать макрос в основном документе Word. Откройте отдельный документ Word, который является пустым. Это будет использоваться для хранения обнаруженных сокращений.
- Нажмите "Запись макроса". Выберите уникальное имя и назначьте сочетание клавиш, например, CTRL + ALT + A.
- Откройте диалог поиска (CTRL + F). Вставьте следующий текст поиска:
<[A-Z]{2,}>.
В диалоговом окне "Найти" выберите "Еще" > установите флажок "Использовать подстановочные знаки". Нажмите кнопку "Найти далее". - Щелкните правой кнопкой мыши по выделенному тексту, стараясь не менять подсветку. Выберите Копировать в контекстном меню.
- Перейдите к отдельному документу Word (ALT + TAB, выберите документ Word). Вставьте скопированный текст и нажмите Enter. ALT + TAB вернуться к исходному документу Word.
- Закройте диалог поиска и один раз нажмите стрелку вправо. Это убирает курсор с выделенного текста и подготавливает его для следующего поиска.
- Остановите запись макроса.
Теперь у вас есть макрос, который находит слово, содержащее две или более заглавные буквы, и сохраняет текст в отдельный документ. Для поиска оставшихся сокращений нажимайте CTRL + ALT + A непрерывно, пока не будет достигнут конец документа. Или отредактируйте макрос и добавьте пока цикл.
Вот как выглядит макрос (без цикла):
Sub GetAcronyms()
Selection.Find.ClearFormatting
With Selection.Find
.Text = "<[A-Z]{2,}>"
.Replacement.Text = ""
.Forward = True
.Wrap = wdFindContinue
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchAllWordForms = False
.MatchSoundsLike = False
.MatchWildcards = True
End With
Selection.Find.Execute
Selection.Copy
Windows("Document1.docx").Activate
Selection.PasteAndFormat (wdPasteDefault)
Selection.TypeParagraph
Windows("TheOriginalDocument.docx").Activate
Selection.MoveRight Unit:=wdCharacter, Count:=1
End Sub