我有一个包含许多首字母缩略词的文档,需要捕获这些首字母缩略词并将其放入文档末尾的首字母缩略词表中。
术语首字母缩写词具有多种含义。我想创建一个包含所有已初始化单词的表;两个或多个大写字母的缩写,表示较长的含义。即CD-ROM、USB、SYNC、MMR、ASCAP等。
我如何创建一个宏来做到这一点?
这样的事情可能会让你开始。添加对“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])"
我使用RegExHero来测试我的表达
我使用以下内容在我的博士论文中查找缩写词。他们都在“()”中。
regEx.Pattern = "\([A-Z]{1,}([a-z]*|\&|\.|\-*)[A-Z]{1,}\)"
您将在主 Word 文档上运行宏。打开一个单独的空白 Word 文档。这将用于存储发现的首字母缩略词。
<[A-Z]{2,}>.
在“查找”对话框中,选择“更多”> 选中“使用通配符”复选框。单击查找下一个按钮。 您现在有一个宏,它可以查找包含两个或多个大写字母的单词,并将文本保存到单独的文档中。要搜索剩余的首字母缩略词,请连续按 CTRL + ALT + A 直到到达文档末尾。或者,编辑宏,并添加 while 循环。
这是宏的样子(没有循环):
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