我有一个包含许多首字母缩略词的文档需要捕获并放入文档末尾的首字母缩略词表中。
术语首字母缩略词有多种含义。我想创建一个包含所有初始化单词的表格;两个或多个大写字母,表示较长的含义。即,CD-ROM,USB,SYNC,MMR,ASCAP等。
如何创建宏来执行此操作?
答案 0 :(得分:7)
这样的事可能会让你开始。添加对“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
答案 1 :(得分:2)
谢谢蒂姆,你的代码很棒!
如果它对其他人有用,那么模式[A-Z]{1,}([a-z]*|\&|\.*)[A-Z]{1,}
会找到更多的缩略词......
(我无权发表评论,因此将其添加为答案)
编辑(仍无法添加注释):\b[A-Z]{1,}([a-z*]|\&|\.|\-)[A-Z]{1,}\b
更强大,但如果首字母缩略词的最后一个字符未大写,则会失败。
答案 2 :(得分:2)
我发现以下效果很好(某些商业名称首字母缩略词是可以容忍的)。我使用它来测试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来测试我的表达式
答案 3 :(得分:1)
我使用以下内容在我的博士论文中找到缩写。他们都在“()”。
regEx.Pattern = "\([A-Z]{1,}([a-z]*|\&|\.|\-*)[A-Z]{1,}\)"
答案 4 :(得分:0)
您将在主Word文档上运行宏。打开一个单独的Word文档,该文档为空白。这将用于存储发现的首字母缩略词。
<[A-Z]{2,}>.
在查找对话框中,选择“更多”&gt;选中“使用通配符”框。单击“查找下一个”按钮。 现在,您有一个宏,可以找到包含两个或更多大写字母的单词,并将文本保存到单独的文档中。要搜索剩余的首字母缩略词,请连续按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