【问题标题】:How Do I Find All Acronyms in an MS Word Document Using a Macro?如何使用宏查找 MS Word 文档中的所有首字母缩略词?
【发布时间】:2012-06-06 15:16:00
【问题描述】:

我有一个包含许多首字母缩略词的文档,需要捕获这些首字母缩略词并将其放入文档末尾的首字母缩略词表中。

首字母缩写词有多种含义。我想创建一个包含所有已初始化单词的表;两个或多个大写字母的缩写,表示较长的含义。即CD-ROM、USB、SYNC、MMR、ASCAP等。

如何创建宏来执行此操作?

【问题讨论】:

  • 您需要先定义“首字母缩略词”的外观。字典中定义了“同义词”和“反义词”,但没有定义“首字母缩略词”。
  • 首字母缩略词是使用首字母缩写的单词,例如 TCP 或 CPU。但是,如何从一个充满普通文本的 Word 文档中提取它们是我无法理解的。
  • 我可以看一下word文档的快照吗?
  • @Jean-FrançoisCorbett 从你的例子中,我们怎么知道MIKE 是一个首字母缩略词,而不是 Word 文档上下文中的专有名词?当我说“在字典中定义”时,我指的是内部单词词库,即您可以按Shift + F7 查找同义词和反义词,但不能查找首字母缩略词

标签: vba ms-word acronym


【解决方案1】:

这样的事情可能会让你开始。添加对“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

【讨论】:

  • 尝试在 Mac Word 2016 中实现这一点,Set regEx = New RegExp 行给了我一个“用户定义的类型未定义”错误。注意Microsoft VBScript Regular Expressions 不是我的参考列表中的选项。有什么建议吗?
  • 不幸的是,Mac 上没有 VBScript。见:stackoverflow.com/questions/27344932/…
【解决方案2】:

感谢蒂姆,您的代码运行良好!

如果它对其他人有用,[A-Z]{1,}([a-z]*|\&|\.*)[A-Z]{1,} 模式会找到更多的首字母缩略词...

(我无权发布 cmets,因此将其添加为答案)

编辑(仍然无法添加 cmets):\b[A-Z]{1,}([a-z*]|\&|\.|\-)[A-Z]{1,}\b 更健壮,但如果首字母缩略词的最后一个字符不大写,则会失败。

【讨论】:

    【解决方案3】:

    我发现以下方法效果很好(某些企业名称的首字母缩写词是可以容忍的)。我用它来测试 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 =匹配
    • J.S.S =匹配
    • JK&S.K =匹配
    • JSK =匹配
    • JK =匹配
    • DKD And Sons = 不匹配
    • J&K Engineering = 不匹配
    • PKF Rogers and Associates = 不匹配

    我用RegExHero 来测试我的表情

    【讨论】:

      【解决方案4】:

      我使用以下方法在我的博士论文中查找缩写词。他们都在“()”中。

      regEx.Pattern = "\([A-Z]{1,}([a-z]*|\&|\.|\-*)[A-Z]{1,}\)"
      

      【讨论】:

      • 感谢新浪的贡献。
      【解决方案5】:

      您将在主 Word 文档上运行宏。打开一个单独的空白 Word 文档。这将用于存储发现的首字母缩写词。

      1. 按“录制宏”。选择一个唯一的名称,并分配一个快捷键,例如 作为 CTRL + ALT + A。
      2. 打开查找对话框 (CTRL + F)。粘贴以下搜索文本: <[A-Z]{2,}>. 在“查找”对话框中,选择“更多”> 选中“使用通配符”复选框。单击查找下一个按钮。
      3. 右键单击选定的文本,注意不要更改 强调。从上下文菜单中选择复制。
      4. 导航到单独的 Word 文档(ALT + TAB,选择 Word 文档)。粘贴复制的文本,然后按 Enter。 ALT + TAB 返回 原始 Word 文档。
      5. 关闭查找对话框并单击一次向右箭头。这个动作 光标离开突出显示的文本,并准备下一个 搜索。
      6. 停止宏录制。

      您现在有了一个宏,它可以查找包含两个或多个大写字母的单词,并将文本保存到单独的文档中。要搜索剩余的首字母缩略词,请连续按 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
      

      【讨论】:

        猜你喜欢
        • 2019-12-09
        • 2019-06-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-11-13
        相关资源
        最近更新 更多